一、HashMap按照value排序

HashMap
HashMap是一个数组和链表组成的一种链表散列结构,存储方式是根据key的hash值来决定存储的位置,这就导致了存储后的元素不会维持插入时的顺序。

Comparator
如果我们需要控制某个类的次序并且该类本身不支持排序,那么就可以建立一个类比较器来进行排序,实现方式很简单只需要实现java.util.Comparator接口。

Collections.sort

Collections.sort(List list,new Comparator(){@overridepublic int compare( o1, o2){return 0;}
});

表示对传入的list进行排序,排序方法需要在comparator接口中重写,按return值进行排序,小于0降序,大于0升序
,一般是对o1和o2两个对象的某个属性进行比较得出结果。

实现

实现原理

由于HashMap不属于list子类,所以无法使用Collections.sort方法来排序,所以我们将hashmap中的entryset取出放入一个ArrayList中,来对ArrayList中的entryset进行排序(根据entryset的值),达到我们对hashmap的值进行排序的效果。

代码

import java.util.*;public class test{public static void main(String[] args) {//产生一个map并添加一些参数Map<String,Integer> map = new HashMap<>();map.put("ddd", 1);map.put("aaa", 2);map.put("bbb", 3);map.put("ccc", 4);List<Map.Entry<String,Integer>> list = new ArrayList<>(map.entrySet()); //将map的entryset放入list集合//对list进行排序,并通过Comparator传入自定义的排序规则Collections.sort(list,new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {return o1.getValue() - o2.getValue(); //重写排序规则,小于0表示升序,大于0表示降序}});//用迭代器对list中的键值对元素进行遍历Iterator<Map.Entry<String, Integer>> iter = list.iterator();while(iter.hasNext()){Map.Entry<String, Integer> item = iter.next();String key = item.getKey();int value = item.getValue();System.out.println("键"+key+"值"+value);}}
}

二、ArrayList使用自定义comparator

import java.sql.Struct;
import java.util.*;public class test{public static void main(String[] args) {List<Student> stu=new ArrayList<>();Student s1=new Student(30,"test1");Student s2=new Student(20,"test2");Student s3=new Student(60,"test3");stu.add(s1);stu.add(s2);stu.add(s3);Collections.sort(stu, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o1.age-o2.age;}});for(int i=0;i<stu.size();i++){System.out.println(stu.get(i).name);}}
}class Student{public int age;public String name;public Student(int age,String name){this.age=age;this.name=name;}
}

java collection自定义comparator进行排序相关推荐

  1. java 怎么自定义排序_Java如何实现List自定义排序

    Java如何实现List自定义排序,自定义,即为,详细内容,相关文章,更多关于 Java如何实现List自定义排序 易采站长站,站长之家为您整理了Java如何实现List自定义排序的相关内容. 实体类 ...

  2. Java 中类的比较与排序方法(应用Comparable接口与Comparator接口)通俗易懂

    引言 在平时写Java的程序的时候,如果要进行一些基本类型的变量的比较,可以很方便得调用Math.max().Math.min()等方法,如果要对数组或者列表进行排序,也可以用Arrays.sort( ...

  3. java lambda sorted_Java8:Lambda表达式增强版Comparator和排序

    1.概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式--特别是怎样使用它来编写Comparator和对集合(Collection)进行排 ...

  4. Java基础-TreeSet与Java自定义类型的排序

    TreeSet与Java自定义类型的排序 演示TreeSet对String是可排序的 TreeSet无法对自定义类型进行排序 比较规则怎么写 自平衡二叉树结构 实现比较器接口 Collections工 ...

  5. Java 8 Comparator: 列表排序

    1.按字母顺序排序字符串列表 List<String> cities = Arrays.asList("Milan","london"," ...

  6. android自定义比较器,java – 使用自定义比较器排序的集合不起作用

    我创建了一个自定义Comparator来对字符串的ArrayList进行排序.我已通过调试器运行它并观察它正确比较和返回值.但是,我的数组没有排序.因为我不熟悉 Java& Android,可 ...

  7. Java Map 自定义排序

    HashMap是不保证顺序的,要有顺序,要用LinkedHashMap,这是按照插入顺序排列的. Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现与HashMap的不同之处在于,后者维护 ...

  8. java对列表数据排序_如何在Java中对列表进行排序

    java对列表数据排序 Sometimes we have to sort a list in Java before processing its elements. In this tutoria ...

  9. Java8:Lambda表达式增强版Comparator和排序

    1.概述 在这篇教程里,我们将要去了解下即将到来的JDK 8(译注,现在JDK 8已经发布了)中的Lambda表达式--特别是怎样使用它来编写Comparator和对集合(Collection)进行排 ...

  10. java list按照某个字段排序_java相关:List对象去重和按照某个字段排序的实现方法...

    java相关:List对象去重和按照某个字段排序的实现方法 发布于 2020-6-8| 复制链接 下面小妖就为大家带来一篇List对象去重和按照某个字段排序的实现方法.小妖觉得挺不错的,现在就分享给大 ...

最新文章

  1. Halcon自定义函数封装方法(全网最详细)
  2. 美国国土安全部发布物联网安全最佳实践
  3. 起底方舟编译器的引用计数!
  4. java反射方法调用_Java反射(3)调用方法
  5. 从集合(内存)中创建RDD
  6. 遇到Io阻塞时会切换任务之【爬虫版】
  7. js复杂对象和简单对象的简单转化
  8. 一种特殊的多语言解决方案
  9. MacOS Monterey 12.3.1(21E258) OC 0.7.9 / Cl 5145 / PE 三分区原版黑苹果镜像
  10. 中国姓氏人口排名及分布
  11. GitHub上收录400余篇任正非的讲话稿
  12. 用户活跃度分析前端java_计算APP用户活跃度的方法及提升活跃度方案
  13. java父类的称谓_《商周金文中的血缘关系称谓》
  14. Zbrush 4R7 P3中给类模型怎么快速隐藏
  15. DROID-SLAM: 用于单目双目RGBD相机的深度视觉SLAM
  16. 前端推荐的学习资源网站
  17. 支持国产ARM64架构部署,支持使用rz、sz命令上传下载文件,JumpServer堡垒机v2.12.0发布
  18. HTML几种设置水平居中和垂直居中的方式
  19. 转行程序员日记---2020-10-19【开始加班了】
  20. 程序员小强转行记#0002

热门文章

  1. linux获取cpu数量函数,Linux上获取CPU Core个数的实现
  2. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定。
  3. java并发编程实战读书笔记3
  4. Apache Flink 在翼支付的实践应用
  5. android AChartEnginee讲解之源码框架解读
  6. Android强大log框架Logger使用详解
  7. 刚刚!中科院主导的国产编程语言木兰负责人回应了!承认32位机器上,是基于Python二次开发!...
  8. Android Multimedia框架总结(九)Stagefright框架之数据处理及到OMXCodec过程
  9. java导入hbase_如何用java导入hbase.dat文件
  10. maximum call stack size exceeded ajax,Maximum call stack size exceeded error