一 应用场景:

当对自己定义的数据结构需要进行指定排序的时候,java中给了我们两个接口Comparable和Comparator

comparable接口定义一个方法:

 public interface Comparable<T> {public int compareTo(T o);}

comparator接口定义方法(jdk版本不同数量不同)注意:有些类实现了comparator,但是没有实现equals方式是因为Object类已经实现了equals方法

public interface Comparator<T> {int compare(T o1, T o2);boolean equals(Object obj);
}

区别在于:实现了comparable的对象直接就可以成为一个可以比较的对象,不过得在类中进行方法定义;comparator在对象外比较,不修改实体类。

二  实例演示

1  Comparable用法

1 定义一个Person实体类实现Comparable接口

public class Person implements Comparable<Person>{public int age;    //年龄public String name;  //姓名//get、set方法public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Person(int age, String name) {super();this.age = age;this.name = name;}@Overridepublic String toString() {return "Person [age=" + age + ", name=" + name + "]";}//实现Comparable接口必须实现compareTo方法public  int compareTo(Person o) {if(this.age==o.age&&this.name==o.name){return 0;}else if(this.age>o.age){System.out.println("this.age:"+this.age+"o.age:"+o.age);return 1;}else{return -1;} }public Person() {super();// TODO Auto-generated constructor stub}}

2  编写测试类进行测试(使用Junit)

import org.junit.Test;
import junit.framework.TestCase;
public class TestCompare extends TestCase {@Testpublic void test1(){List<Person> list=new ArrayList<Person>();Person test1=new Person(66,"李四");Person test2=new Person(29,"王五");Person test3=new Person(28,"赵六");Person test4=new Person(20,"钱三");list.add(test4);list.add(test3);list.add(test2);list.add(test1);Collections.sort(list);for(Object s:list){System.out.println(s);}}
}

3 运行结果:对象实现了comparable接口就自动排序

this.age:28o.age:20
this.age:29o.age:28
this.age:66o.age:29
Person [age=20, name=钱三]
Person [age=28, name=赵六]
Person [age=29, name=王五]
Person [age=66, name=李四]

2 Comparator用法

1 定义一个实体类

public class emp {public int age;public String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public emp(int age, String name) {super();this.age = age;this.name = name;}public emp() {super();// TODO Auto-generated constructor stub}@Overridepublic String toString() {return "emp [age=" + age + ", name=" + name + "]";}
}

2 编写测试类测试:

import org.junit.Test;
import junit.framework.TestCase;
public class TestCompare extends TestCase {@Testpublic void test2(){List<emp> list=new ArrayList<emp>();emp test1=new emp(69,"李四");emp test2=new emp(29,"王五");emp test3=new emp(28,"赵六");emp test4=new emp(20,"钱三");list.add(test4);list.add(test3);list.add(test2);list.add(test1);Collections.sort(list,new Comparator<emp>(){@Overridepublic int compare(emp o1, emp o2) {if(o1.age==o2.age&&o1.name==o2.name){return 0;}else if(o1.age>o2.age){return 1;            }else{return 0;}}});        for(Object s:list){System.out.println(s);}      }
}

3 运行结果:

emp [age=20, name=钱三]
emp [age=28, name=赵六]
emp [age=29, name=王五]
emp [age=69, name=李四]

欢迎关注下方公众号,一起交流,期待你的到来

Comparable和Comparator的用法与区别相关推荐

  1. Comparable和Comparator的联系与区别

    关于Comparable和Comparator的联系和区别,我们先实现这个两个接口. package com.blb.考前; public class Demo02 implements Compar ...

  2. Comparable和Comparator的用法和区别

    文章目录 目录 文章目录 前言 一 .Comparable 1.Comparable是什么? 2.comparable有用吗? 有用的话它有什么用? 没学compar之前的解决办法 : 2.在学习了c ...

  3. 关于comparable与comparator的用法(即自定义集合框架用法 )

    1 package javastudy; 2 3 import java.util.Comparator; 4 import java.util.Iterator; 5 import java.uti ...

  4. Comparable和Comparator两接口的区别

    comparable接口实际上是出自java.lang包 它有一个 compareTo(Object obj)方法用来排序 Comparable可以认为是一个内比较器,实现了Comparable接口的 ...

  5. 来吧,一文彻底搞懂Java中的Comparable和Comparator

    大家好,我是沉默王二,周末在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:Java 的 Comparable 和 Comparator 是兄弟俩吗?像这类灵魂拷问 ...

  6. 面试官:元素排序Comparable和Comparator有什么区别?

    作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 本文已收录<Java常见面试题>系列,Git开源地址:htt ...

  7. Java 解惑:Comparable 和 Comparator 的区别

    读完本文你将了解到: Comparable 自然排序 Comparator 定制排序 总结 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢? ...

  8. Java中Comparable和Comparator区别小结

    阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Comparable简介 Comparable是排序接口.若 ...

  9. Java中Comparable和Comparator接口区别分析

    本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...

最新文章

  1. java 的23种设计模式
  2. 《中国人工智能学会通讯》——8.25 基于演化优化的生物网络配准
  3. Sphinx全文检索引擎测试
  4. java403forbidden_java – Spring boot – 返回403 Forbidden而不是重定向到登录页面
  5. linuex查看繁忙_[个人笔记] 关于linux的常见问题合集
  6. ASE光源 ASE噪声
  7. puppet成长日记二 Package资源详细介绍及案例分析
  8. Tomcat设置监听端口80、配置虚拟主机、安装zrlog博客、日志文件
  9. 在JavaScript中从base64字符串创建Blob
  10. css3中的文字效果
  11. linux下jdk1.8搭建笔记
  12. 关于word粘贴图片显示不全的解决办法
  13. 数据库服务器虚拟内存设置
  14. 树莓派4b安装Android TV 10
  15. matlab 三维颜色,Matlab三维视图颜色控制
  16. Matlab 绘制 - 点和向量:向量加减的方法和源码
  17. Hyperledger Fabric 2.x 环境搭建
  18. [BJDCTF2020]Mark loves cat(3种解法)
  19. RS485——RS485通信基础理论与STM32测试
  20. 微信朋友圈营销如何做好头像_昵称_签名_背景基础设置?

热门文章

  1. [JavaScript]iframe的contentWindow
  2. Oracle 创建表空间详细过程
  3. android小说阅读源码、bilibili源码、MVP新闻源码等
  4. stream计算平均值
  5. 什么是计算机用英语解释,常用计算机英语解释
  6. Liunx基础命令 - ls命令
  7. asp.net控件产品技术文档中文版
  8. 我把一切告诉你,怎么去做一个项目。
  9. unity中使用c#钩子
  10. ironSource 入列广告ROI全球TOP 5