比较器Comparable(内部比较器)和Comparator(外部比较器)

1.使用Comparable是从实体类中直接继承Comparable接口,并且重写compareTo方法。
2.使用Comparator是建立一个外部类(继承Comparator接口,重写compare方法),在排序时,调用这个外部类,不需要改变之前的实体类

上代码:

内部比较器:

package comparator;public class Person implements Comparable {        //内部比较器private String name;private Integer age;private String sex;public Person(String name, Integer age, String sex) {this.name = name;this.age = age;this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +'}';}@Overridepublic int compareTo(Object o) {Person p = (Person) o;int result = this.age>p.age? -1:(this.age==p.age?0:1);  //降序排列return result;}
}

main中实现:

 Person p1 = new Person("zs",12,"男");Person p2 = new Person("ls",15,"男");Person p3 = new Person("ww",10,"男");List<Person> list = new ArrayList<>();list.add(p1);list.add(p2);list.add(p3);Collections.sort(list);System.out.println(list);

结果:

外部比较器:

实体类:

package comparator;public class Student {private String name;private Integer age;private String sex;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +'}';}public Student(String name, Integer age, String sex) {this.name = name;this.age = age;this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}

调用的外部类:

package comparator;import java.util.Comparator;public class OutComparable implements Comparator {@Overridepublic int compare(Object o1, Object o2) {Student p1 = (Student) o1;Student p2 = (Student) o2;return p1.getAge()-p2.getAge();}  //外部比较器
}

main方法:

Student s1 = new Student("zs",15,"女");Student s2 = new Student("zs",13,"女");Student s3 = new Student("zs",18,"女");List<Student> list1 = new ArrayList<>();list1.add(s1);list1.add(s2);list1.add(s3);Collections.sort(list1,new OutComparable());System.out.println(list1);

结果:

【注】
在内部排序中,三元表达式中,返回值-1,此元素要排在之前元素的前面,返回值0,两个元素并列,返回值1,此元素要排在之前元素的后面。

比较器Comparable(内部比较器)和Comparator(外部比较器)相关推荐

  1. JAVASE的内、外部比较器Comparable和Comparator

    1.内部比较器,自定义实体类实现Comparable接口 /*** @author Nyotengu* @date 18/7/26 15:39*/ public class SortTest {/** ...

  2. 接口应用:内部比较器Comparable

    接口应用:内部比较器Comparable public interface Comparable {public int compareTo(Object obj); } public class B ...

  3. java 比较器comparator_Java中比较器的使用Compare和Comparator

    Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较 ...

  4. verilog——74HC85四位数值比较器并扩展为16位数值比较器

    verilog--74HC85四位数值比较器并扩展为16位数值比较器 74HC85的仿真 设计思路 代码 设计模块 测试模块 仿真结果 扩展为16位比较器 设计思路 串行代码实现 设计模块 测试模块 ...

  5. 数电实验(四)利用集成数值比较器74LS85设计一个4位数值比较器

    数电实验(四)利用集成数值比较器74LS85设计一个4位数值比较器 要求: 1.输入为两个4位二进制数,分别接四个逻辑电平开关,同时接数码管 2. 输出和LED相连 Multisim仿真:

  6. JavaSE——类集(下)(Set、Comparable、Collections、Comparator、Map)

    第2节 集合(下) 一.Set接口 java.util.Set 接口和 java.util.List接口一样,同样继承自 Collection接口,它与Collection接口中的方法基本一致,并没有 ...

  7. const、static、内部链接属性和外部链接属性整理

    2019独角兽企业重金招聘Python工程师标准>>> 说起const.static.以及#define大家都知道,我一直以为我也是知道的,昨天一同学说他面试时被问到#define定 ...

  8. 小米手机60帧录屏_手机录屏怎样只录手机内部声音不录入外部声音?教你三种方法,一定能帮到你...

    随着Android系统不断迭代升级,手机截图长截图.手机录屏都成为了每部手机的标配,现在的手机都会有这几个功能! 但是经常使用录屏功能的小伙伴可能会遇到一些问题,比如录屏录制声音时,会将周围环境中的噪 ...

  9. 计算机内部总线和外部总线,科学网-怎样将计算机内部总线扩展为外部网络?-姜咏江的博文...

    怎样将计算机内部总线扩展为外部网络? 姜咏江 透明计算公示成果的第一条就是"将原来计算机的内部总线扩展为外部网络".现在我们来谈谈能不能将计算机内部总线扩展成外部网络. 1.什么是 ...

最新文章

  1. PIC单片机学习之独立按键
  2. Android Studio 第四十九期 - Sqlite数据库四种写法
  3. SQL2000输入的值与数据类型不一致,或者此值与列的长度不一致“
  4. 单源最短路径(spfa)
  5. python画方波_numpy绘制方波及方波无穷级数的表示
  6. 找回root密码--Mysql5.6.36
  7. anaconda中怎么sh_【好工具】 深度学习炼丹,你怎么能少了这款工具!JupyterLab 远程访问指南...
  8. 【力扣】NO.7.整数反转
  9. hdmi tv 信息 的edid_开发HDMI你需要了解什么
  10. hdu-acm steps 命运
  11. 卡方分布分位数_数理统计第五讲(三大分布)
  12. JAR 文件规范详解
  13. FastAPI 是什么?
  14. 如何用阿里云云盘快照恢复部分数据
  15. LC-恢复二叉搜索树(JavaScript实现)
  16. Flutter事件分发
  17. leetcode-1833. 雪糕的最大数量(排序+贪心)
  18. 云服务器liunx系统怎么安装,云服务器怎么安装linux系统
  19. 今天感受了一下ipad
  20. 基于STM32F103,SPI驱动GC9306屏幕

热门文章

  1. 微软发话:Win10杀毒软件要优先选它
  2. Shiro内置的FilterChain
  3. 设计模式——工厂模式
  4. 网络基础——知识生活化会变得如此简单
  5. 设计模式学习笔记:六大原则
  6. Java设计模式---桥接Bridge模式
  7. python之路-网络编程
  8. 集体智慧编程学习笔记——第一讲
  9. (四)创建ROS程序包(就是软件包)
  10. MySQL之终端(转载笔记)