Comparator接口

今天来给大家介绍下java.utils包下的Comparator接口。该接口代表一个比较器,java数组工具类和集合工具类中提供对sort方法排序就是使用 Comparator接口来处理排序的。

Comparator接口中有一个方法int compare(T o1, T o2)。这个方法返回值是int类型,如果返回值小于0,说明比较结果是o1<o2,如果返回值等于0,说明比较结果是o1=o2,如果返回值大于0,则说明比较结果是o1>o2。

既然是接口,那么我们就可以实现它,来自定义其中对比较规则,即可实现在一个List列表中将元素按照某个属性进行排序。

下面我们用代码举例说明,如下:

package com.java.utils.Comparator;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;/**
* 类说明:
*   比较器Comparator接口的应用
*/
public class ComparatorTest {/*** 实体对象类 */static class User {String name;int age;public User(String name,int age) {this.name=name;this.age=age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}/*** 自定义比较器* 根据名称比较*/static class MyComparatorName implements Comparator<User>{@Overridepublic int compare(User u1, User u2) {return u1.getName().compareTo(u2.getName()) * -1;}}/*** 自定义比较器* 根据年龄比较*/static class MyComparatorAge implements Comparator<User>{@Overridepublic int compare(User u1, User u2) {return (u1.getAge() - u2.getAge());}}//测试public static void main(String[] args) {List<User> list =new ArrayList<User>();User u1 = new User("a", 2);User u2 = new User("d", 0);User u3 = new User("c", 3);list.add(u1);list.add(u2);list.add(u3);Collections.sort(list, new MyComparatorName());for(User u :list){System.out.println(u.getName());}Collections.sort(list, new MyComparatorAge());for(User u :list){System.out.println(u.getAge());}}}

在上面对例子中,我们首先按照名称从大到小进行排序,输出结果是d、c、a然后又按照年龄从小到大进行排序,输出结果是0、2、3。

需要注意的是,Collections.sort方法默认是按照返回结果从小到大进行排序,如果我们需要从大到小则在实现比较器大时候将返回结果乘以-1即可。

是不是很简单?如果是我们自己实现比较器,那么我们就可以根据实际的业务需求去实现排序。

Comparator接口相关推荐

  1. Java中比较对象的两个接口Comparable接口和Comparator接口

    2019独角兽企业重金招聘Python工程师标准>>> jdk文档是这样介绍的 1.  public interface  Comparable<T>:此接口强行对实现它 ...

  2. Java基础之Comparable接口和Comparator接口的比较

    前言 就是普普通通的写这么一篇文章,java集合类估计java程序猿都知道,那就写一点小众的. 在实际应用中,我们往往有需要比较两个自定义对象大小的地方.而这些自定义对象的比较,就不像简单的整型数据那 ...

  3. java arraylist comparable_Java 两种ArrayList集合自定义对象属性排序,Comparator接口 或 Comparable接口...

    1,Comparator接口 -- 重写Comparator public class User { private String id; private String name; public Us ...

  4. Comparable接口和Comparator接口

    目录 1 介绍 2 Comparable接口 3 Comparator接口 4 总结 1 介绍 有这样2个人,一个人光头,一个人有黑色头发,现在不允许染发,只允许光头的带假发,理由是有头发的人没有必要 ...

  5. Java之——利用Comparator接口对多个排序条件进行处理

    转载自:http://blog.csdn.net/l1028386804/article/details/56513205 膜拜大神··· 一.需求 假设现在有个如此的需求:需要对一个这样的雇员列表进 ...

  6. Comparable接口与Comparator接口

    [Comparable和Comparator源码] java.lang.Comparablepublic interface Comparable<T> {public int compa ...

  7. 【错误记录】Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Comparator 接口 , 对 ArrayList 集合中的元素排序无效 ; 打印之后没有进行排序 ; 错误代码就不贴出来了 , 随便搜索 ...

  8. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  9. 007_JDK的Comparator接口

    1. JDK1.8中的Comparator接口 package java.util;public interface Comparator<T> {int compare(T o1, T ...

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

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

最新文章

  1. 10亿级数据规模的半监督图像分类模型,Imagenet测试精度高达81.2% | 技术头条...
  2. 如何配置jdk环境变量
  3. LSD-SLAM 编译过程(Ubuntu 14.04 + ROS Indigo
  4. SQL server 2000/2005 智能感应插件(菜鸟新手的帮手)
  5. [蓝桥杯2016初赛]剪邮票-dfs+next_permutation(好题)
  6. mssql2008极占内存
  7. 无线网络MIMO技术浅谈
  8. Linux内核分析之搭建Mykernel
  9. python的书写格式_python 快速写作技巧,格式
  10. 第三方物流(Third Party Logistics,3PL)
  11. 中国智能座舱行业发展前景展望与投资战略规划研究报告2022年版
  12. 商业计划书范文3000_大学生商业计划书范文
  13. https开头的网址是什么意思_网址是什么意思?基础知识普及
  14. Unity3D游戏引擎最详尽基础教程
  15. realize与recognize辨析
  16. 三维可视化引擎让空间数据管理更高效
  17. java.util工具类之Currency类
  18. 思维导图软件freemind的使用教程
  19. 利用闲置笔记本电脑搭建linux服务器并布置自己的网站
  20. 【附源码】计算机毕业设计java志愿者招募系统设计与实现

热门文章

  1. linux中修改mycat端口,mycat修改配置之后需要重启吗
  2. 我在CSDN开博啦!
  3. 宗宁:云在指尖被定性为传销,三级分销们怕了么?
  4. 微信营销十二(短视频、直播)
  5. 大河抽奖盲盒V1.9.12开源程序源码
  6. JS:将资源生成二维码
  7. 联发科技推出曦力A系列 掀起智能手机科技普及革命
  8. c语言浮点数格式化,关于c ++:如何使用C的sprintf()安全格式化浮点数/双精度数?...
  9. codeblocks安装、使用、调试教程
  10. 创意搜狗输入法设计理念(转2008-02-04 21:14)