Java 排序 Compare 

在Java中使用集合来存储数据时非常常见的,集合排序功能也是常用功能之一.下面看一下如何进行集合排序,常用的方法有: ComparatorComparable

Comparator接口

使用步骤:

  1. 新建比较类,
  2. 实现Comparator接口,
  3. 重写compare方法,
  1. package sort; 


  2. import java.util.Comparator; 


  3. public class LuckBoyCompare implements Comparator<LuckBoy>{ 


  4. @Override 

  5. public int compare(LuckBoy o1, LuckBoy o2) { 

  6. return o1.getAge()-o2.getAge(); 







  • 调用Collections.sort()方法进行排序,
  • 形式:Collections.sort(集合, 比较器实例).
  1. @Test 

  2. public void test1() { 

  3. List<LuckBoy> boyList = new ArrayList<LuckBoy>(); 

  4. LuckBoy boy1 = new LuckBoy("张三",13,"上海"); 

  5. LuckBoy boy2 = new LuckBoy("李四",12,"北京"); 

  6. LuckBoy boy3 = new LuckBoy("王五",18,"深圳"); 

  7. LuckBoy boy4 = new LuckBoy("马六",17,"南京"); 


  8. boyList.add(boy1); 

  9. boyList.add(boy2); 

  10. boyList.add(boy3); 

  11. boyList.add(boy4); 


  12. System.out.println("排序前:"); 

  13. for (LuckBoy luckBoy : boyList) { 

  14. System.out.println(luckBoy); 




  15. System.out.println("排序后:"); 

  16. Collections.sort(boyList, new LuckBoyCompare()); 

  17. for (LuckBoy luckBoy : boyList) { 

  18. System.out.println(luckBoy); 





LuckBoy.java

  1. package sort; 


  2. public class LuckBoy{ 

  3. private String name; 

  4. private Integer age; 

  5. private String city; 


  6. public LuckBoy() { 

  7. super(); 




  8. public LuckBoy(String name, Integer age, String city) { 

  9. super(); 

  10. this.name = name; 

  11. this.age = age; 

  12. this.city = city; 




  13. public String getName() { 

  14. return name; 



  15. public void setName(String name) { 

  16. this.name = name; 



  17. public Integer getAge() { 

  18. return age; 



  19. public void setAge(Integer age) { 

  20. this.age = age; 



  21. public String getCity() { 

  22. return city; 



  23. public void setCity(String city) { 

  24. this.city = city; 




  25. @Override 

  26. public String toString() { 

  27. return "LuckBoy [name=" + name + ", age=" + age + ", city=" + city + "]"; 





打印结果:

排序前:
LuckBoy [name=张三, age=13, city=上海]
LuckBoy [name=李四, age=12, city=北京]
LuckBoy [name=王五, age=18, city=深圳]
LuckBoy [name=马六, age=17, city=南京]
排序后:
LuckBoy [name=李四, age=12, city=北京]
LuckBoy [name=张三, age=13, city=上海]
LuckBoy [name=马六, age=17, city=南京]
LuckBoy [name=王五, age=18, city=深圳]

Comparable接口

使用步骤:

  • 数据模型实现Comparable接口,
  • 重写compareTo方法,
  1. package sort; 


  2. public class LuckBoy implements Comparable<LuckBoy>{ 

  3. //TODO 中间代码省略 

  4. @Override 

  5. public int compareTo(LuckBoy o) { 

  6. return this.age-o.age; 






  • 调用Collections.sort()方法进行排序,
  • 形式:Collections.sort(集合)
  1. @Test 

  2. public void test2() { 

  3. List<LuckBoy> boyList = new ArrayList<LuckBoy>(); 

  4. LuckBoy boy1 = new LuckBoy("张三",13,"上海"); 

  5. LuckBoy boy2 = new LuckBoy("李四",12,"北京"); 

  6. LuckBoy boy3 = new LuckBoy("王五",18,"深圳"); 

  7. LuckBoy boy4 = new LuckBoy("马六",17,"南京"); 


  8. boyList.add(boy1); 

  9. boyList.add(boy2); 

  10. boyList.add(boy3); 


  11. boyList.add(boy4); 


  12. System.out.println("============================"); 

  13. System.out.println("排序前:"); 

  14. for (LuckBoy luckBoy : boyList) { 

  15. System.out.println(luckBoy); 




  16. System.out.println("排序后:"); 

  17. Collections.sort(boyList); 

  18. for (LuckBoy luckBoy : boyList) { 

  19. System.out.println(luckBoy); 





打印结果:

排序前:
LuckBoy [name=张三, age=13, city=上海]
LuckBoy [name=李四, age=12, city=北京]
LuckBoy [name=王五, age=18, city=深圳]
LuckBoy [name=马六, age=17, city=南京]
排序后:
LuckBoy [name=李四, age=12, city=北京]
LuckBoy [name=张三, age=13, city=上海]
LuckBoy [name=马六, age=17, city=南京]
LuckBoy [name=王五, age=18, city=深圳]

区别

Comparator 使用灵活,不需要修改源码.但是,使用时需要传入比较器对象;

Comparable 使用简单,但是需要修改源码.

集合排序 Comparator和Comparable的使用区别的更多相关文章

  1. Comparator与Comparable用法与区别

    一.概述.   Comparator和Comparable两者都属于集合框架的一部分,都是用来在对象之间进行比较的,但两者又有些许的不同,我们先通过一个例子来看一下他们的区别,然后再分别学习下它们的源 ...

  2. Java集合中Comparator和Comparable接口的使用

    在Java集合中,如果要比较引用类型泛型的List,我们使用Comparator和Comparable两个接口. Comparable接口 -- 默认比较规则,可比较的 实现该接口表示:这个类的实例可 ...

  3. Java自学-集合框架 Comparator和Comparable

    Java Comparator和Comparable 步骤 1 : Comparator 假设Hero有三个属性 name,hp,damage 一个集合中放存放10个Hero,通过Collection ...

  4. 集合排序Comparable和Comparator有什么区别?

    Comparable和Comparator兄弟俩长得是真像.但是,需要注意下,使用中它们还是有不少区别的.下面,就一探究竟吧. 一.Comparator 做过集合排序的童鞋应该知道,可以使用Colle ...

  5. Java集合排序方法comparable和comparator的总结

    一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ...

  6. Java://Comparator、Comparable的用法(按照要求将set集合的数据进行排序输出):

    import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; //comparator. ...

  7. Java学习笔记--集合元素的比较Comparable,Comparator

    原文见: http://www.cnblogs.com/sunflower627/p/3158042.html 1. Comparator 和 Comparable 相同的地方 他们都是java的一个 ...

  8. 接口Comparator和Comparable的区别和联系

    1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的. 什么是自定义class: 如 public class Pe ...

  9. comparator接口与Comparable接口的区别

    1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Pe ...

随机推荐

  1. Win7无法安装程序提示Installer integrity check has failed的解决方法

    最近小明在Win7系统中下载了一款软件,但是在下载的时候弹出了NSIS Error:Installer integrity check has failed.Common causer include ...

  2. chrome浏览器安装不上的惨痛经历

    项目在赶进度的时候,手贱把chrome的一些文件删除了,整个浏览器都没法打开 决定重装下,但是连卸载的功能都打不开了 上网重新下载了个安装包,发现安装包都打不来 很绝望,查了很多资料 很多人说要删除注 ...

  3. JAVA核心技术I---JAVA基础知识(package和import)

    一:package 所有的Java类都是放置在同一个目录下面的,因此类之间的相互调用无需显式声明调用. –同一个目录下,两个类的名字不能相同 –文件过多,查找和修改都不易,且容易出 Java支持多个目 ...

  4. tomcat如何访问非webapp下的资源文件

    只要在%tomcathome%\conf\server.xml文件,在标签中加入文件中加入如下代码即可: <Host name="localhost" appBase=&qu ...

  5. .NET技术-1.0.使用反射、特性简化代码(验证Model类)

    使用反射.特性简化代码 参考项目:利用反射验证Model类/AssemblyVerification 假设现在有一个学生类(Student) /// <summary> /// 学生类 / ...

  6. js中得计算问题算式结果拼接成字符串怎么解决

    如题:经常遇到类似问题 一种:自定义的弱类型 var savNum=0; var num=$("#numU").val();//jsp页面获得得值 savNum=parseInt( ...

  7. exp和imp导入导出时表空间问题【未完】

    准备工作 第一步: 创建教师和学生用户 教师用户/密码 TEACHER/t123456 学生用户/密码 STUDENT/s123456 参考链接 http://www.cnblogs.com/what ...

  8. 2018牛客网暑期ACM多校训练营(第一场)E Removal(DP)

    题意 给你一个大小为n的数组,你可以删掉数组中的任意m个数,问你在删除m个数之后剩下的数组有多少种.(其中数组的每个数的大小<=k) 分析 显然需要动态规划,而k又很小,所以二维dp没问题. 设 ...

  9. 在 CentOS6 上安装 Zabbix3.0 Agent 并开启客户端自动注册

    #!/bin/bash # # .配置yum源 # cat /etc/redhat-release |grep -i centos |grep '6.[[:digit:]]' &>/de ...

  10. git多人协作式开发时分支管理策略

    什么是 git-flow? Git Flow是一套使用Git进行源代码管理时的一套行为规范 主分支Master 首先,代码库应该有一个.且仅有一个主分支.所有提供给用户使用的正式版本,都在这个主分支上 ...