java内外部比较器(Comparator、Comparable)使用场景与详解
来源:互联网 发布:高斯面膜 知乎 编辑:程序博客网 时间:2024/06/05 21:16
内外部比较器使用:
- 内部比较器:需比较的类实现接口 Comparable,使该类对外提供一个默认比较的实现
public class Test { public static void main(String[] args) { //创建TreeSet并加入worker对象 TreeSet<Worker> set = new TreeSet<Worker>(); set.add(new Worker("zhang3", 18)); set.add(new Worker("li4", 25)); set.add(new Worker("wang5", 22)); set.add(new Worker("lao6", 22)); set.add(new Worker("xiaoming", 22)); //遍历输出信息 Iterator<Worker> iterator = set.iterator(); while (iterator.hasNext()) { Worker worker = iterator.next(); System.out.println(worker); } }}public class Worker implements Comparable<Worker> { private String name; private int age; public Worker(String name, int age) { super(); this.name = name; this.age = age; } /* * 先按年龄排,次要按名字排 * 负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。 */ @Override public int compareTo(Worker w) { int sub = this.age - w.age; if (sub == 0) return this.name.compareTo(w.name);//使用String的comareTo方法 else return sub; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Worker [name=" + name + ", age=" + age + "]"; }}
- 外部比较器:需比较的类不做任何实现,该类通过工具类Collections调用sort方法传入一个实现了接口 Comparator的类和一个List
public class Test { public static void main(String[] args) { //创建List并加入worker对象 List<Worker> list = new ArrayList<Worker>(); list.add(new Worker("zhang3", 18)); list.add(new Worker("li4", 25)); list.add(new Worker("wang5", 22)); list.add(new Worker("lao6", 22)); list.add(new Worker("xiaoming", 22)); Collections.sort(list, new MyComparator());//传入list和比较器排序 //遍历输出信息 for (int i = 0; i < list.size(); i++) { Worker worker = list.get(i); System.out.println(worker); } }}public class Worker { private String name; private int age; public Worker(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return "Worker [name=" + name + ", age=" + age + "]"; }}public class MyComparator implements Comparator<Worker> { /* * 先按年龄排,次要按名字排 * 根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数 */ @Override public int compare(Worker o1, Worker o2) { int sub = o1.getAge() - o2.getAge(); if (sub == 0) return o1.getName().compareTo(o2.getName());//使用String的comareTo方法 else return sub; }}
总结:
- TreeSet仅能根据创建时实现的comparable接口(内部比较器)进行排序,且HashSet不支持内部比较器,工具类Collections.sort()方法仅能对List排序。
- TreeSet—使用— 内部比较器
- List—使用—外部比较器
- 在一个类没有提供比较器时或提供的比较器不适用时,就需要使用外部比较器(例如:拿到一个jar包但它的类没比较器,总不能反编译去改代码)
0 0
- java内外部比较器(Comparator、Comparable)使用场景与详解
- java比较器Comparator与Comparable
- comparator与Comparable比较器
- Java比较器(Comparable、Comparator)
- Java-比较器(Comparable、Comparator)
- Java中使用Comparable与Comparator实现比较
- Comparable 与 Comparator 比较
- Java中常用的比较器Comparable与Comparator
- java Comparable接口与Comparator接口比较
- Java的比较接口 Comparable与Comparator
- java比较器Comparable和Comparator的使用
- comparable(内部比较器)和Comparator(外部比较器)比较器
- 内部比较器Comparable和外部比较器Comparator
- 比较器Comparable与Comparator实践
- Comparable、Comparator比较器
- Java常用类库--Arrays、比较器(comparable、Comparator)
- java常用类库---比较器(Comparable,Comparator)
- 浅谈Java比较器comparable/comparator
- LeetCode之路:520. Detect Capital
- 单链表题集
- 利用qsort库函数实现快速排序
- idea spark远程调试
- 使用PowerDesigner15创建MySQL数据库表结构设计
- java内外部比较器(Comparator、Comparable)使用场景与详解
- BLE 配对后通信其中一方LTK丢失情况
- header("Content-type:text/html;charset=utf-8");
- SVG实现攻击效果
- C#学习笔记 1 初识值类型
- 使用Android Studio开发/调试Android源码
- Android 组件化
- hibernate学习笔记4 ------QBC/命令HQL查询/本地SQL/存储过程
- 递推数列特征方程推导