集合框架-Comparator和Comparable的区别
来源:互联网 发布:物联网大数据的应用 编辑:程序博客网 时间:2024/05/17 20:44
Comparator也叫外部比较器,常在使用Collections工具类进行集合排序的时候使用。外部比较器Comparator可以理解为一个专用的比较器,当集合中的对象不支持自比较或者比较的功能不能满足程序的需求时,可以写一个比较器来完成两个对象之间的比较。
import java.util.Collections;import java.util.Comparator;import java.util.LinkedList;public static void main(String[] args) {LinkedList<Pig> ts = new LinkedList<>();ts.add(new Pig("话风", 15));ts.add(new Pig("狐仙", 2));ts.add(new Pig("苏果", 23));ts.add(new Pig("环形", 10));ts.add(new Pig("吉吉", 19));//使用Collections类进行排序//Collections的static void sort(List<T> list, Comparator c) 使用的就是Comparator比较器Collections.sort(ts, new Compa());//遍历for(int i = 0; i < ts.size(); i++){System.out.println(ts.get(i).name+"----"+ts.get(i).age);}//和Comparable内部比较器相比,集合中装的元素对应的类不用去实现Comparable类//但是需要额外的去实现Comparator比较器}//集合装取的元素类class Pig {public String name = "默认";public int age = 0;public Pig(String name, int age) {super();this.name = name;this.age = age;}}//实现comparator接口,该类作为一个比较器类使用class Compa implements Comparator{@Overridepublic int compare(Object o1, Object o2) {int age1 = ((Pig)o1).age;int age2 = ((Pig)o2).age;int flag = (age1>age2 ? 1 :(age1==age2 ? 0 : -1));/* 以两个猪的年龄来比较 * 如果o1猪的年龄大于o2猪的年龄,返回正数 * 如果o1猪的年龄等于o2猪的年龄,返回0 * 如果o1猪的年龄小于o2猪的年龄,返回负数 */return flag;}}
Comparable又叫内部比较器,常使用在TreeSet排序时。TreeSet类在添加的元素的时候不是无序的,而是会进行升序排序的,默认是按照自然升序排列的。因为TreeSet类在实现Set接口的同时,也实现了SortedSet接口,所以TreeSet类是一个具有排序功能的类。
如果想定义自己的排序方式,方法也很简单,就是让加入TreeSet集合的对象所属类实现Comparable接口。而我们使用String,Intereger类等也会有排序的效果,是因为这些类已经实现了Comparable接口。
import java.util.TreeSet;public static void main(String[] args) {TreeSet<Bird> ts = new TreeSet<>();ts.add(new Bird(15));ts.add(new Bird(5));ts.add(new Bird(100));ts.add(new Bird(20));//遍历,使用foreachfor(Bird b : ts){System.out.println(b.age);}}//鸟类实现Comparable接口,并重写compareTo方法class Bird implements Comparable {public int age = 0;public Bird(int age) {super();this.age = age;}@Overridepublic int compareTo(Object o) {int tage = ((Bird)o).age;//强制转换获取鸟的年龄int flag = (tage > this.age ? 1:(tage == this.age ?0:-1));/* 比较两个鸟的年龄, * 若o的年龄大于this的年龄返回正数, * 若两个年龄一样大返回0 * 若o的年龄小于this的年龄返回负数 */return flag;}}
阅读全文
0 0
- 集合框架-Comparator和Comparable的区别
- 集合的排序,COmparable和Comparator的区别
- Java集合之七Comparable和Comparator的区别
- Comparator和Comparable的区别
- Comparable和 Comparator的区别
- Comparator和Comparable的区别
- comparable和comparator的区别
- Comparable和Comparator的区别
- Comparator 和 Comparable 的区别
- comparable和comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable 和 Comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- Comparable和Comparator的区别
- JDBC ResuleSet
- 【BIOS】MBR引导程序类型及详解
- Android 爬坑之旅:软键盘挡住输入框问题的终极解决方案
- 网上请求图片
- Easy--Animation
- 集合框架-Comparator和Comparable的区别
- win下官方BLVC版本caffe配置及anaconda2安装与python下配置
- Neutron Server 分层模型(5)
- 解决cmd下mysql中文乱码问题
- 使用 java apache http client 增加重连 retry
- Linux内核驱动之GPIO子系统(一)GPIO的使用
- 一、任意轴线性变换公式
- JS基础学习第十二天:String字符串方法
- android全透明状态栏