- Comparable和Comparator的区别
- Comparable
- Comparator
- Conllections
Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。
如果开发者有一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象需要实现Comparable接口,即重写了compareTo方法。
//Comparable.compareTo(T o) public int compareTo(T o); //Collections.sort() public static > void sort(List list) { list.sort(null); }
compareTo方法的返回值是int,有三种情况:
1、比较者大于被比较者,那么返回正整数
2、比较者等于被比较者,那么返回0
3、比较者小于被比较者,那么返回负整数
Comparator可以认为是是一个外比较器,个人认为有两种情况可以使用实现Comparator接口的方式:
1、一个对象不支持自己和自己比较(没有实现Comparable接口),但是又想对两个对象进行比较
2、一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己想要的那种比较方式
//Collections.sort() public staticvoid sort(List list, Comparator super T> c) { list.sort(c); } default void sort(Comparator super E> c) { Object[] a = this.toArray(); Arrays.sort(a, (Comparator) c); ListIterator i = this.listIterator(); for (Object e : a) { i.next(); i.set((E) e); } }
Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和Comparable接口一样是int,有三种情况:
1、o1大于o2,返回正整数
2、o1等于o2,返回0
3、o1小于o3,返回负整数
employees.sort((o1, o2) -> o1.getName().compareTo(o2.getName())); Collections.sort(employees, (o1, o2) -> o1.getName().compareTo(o2.getName()));
也可以使用comparing方法
public static> Comparator comparing( Function super T, ? extends U> keyExtractor) { Objects.requireNonNull(keyExtractor); return (Comparator & Serializable) (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2)); }
Comparator & Serializable
The returned comparator is serializable if the specified function is also serializable.
The cast ensures that the internal class used by Java to implement the lambda will implements Serializable.
如果指定的函数也是可序列化的,则返回的比较器是可序列化的。
强制转换确保 Java 用于实现 lambda 的内部类将实现 Serializable。
Collections.sort(users, Comparator.comparing(User::getName));Conllections
在java中专门给某些类加s,这里表示工具类,工具类是专门辅助其他类完成功能的。
*** 作List,Set,Map等集合的工具类
reverse():反转list中元素
shuffle():对list集合元素进行随机排序
sort():根据元素的自然顺序排序
swap():交换元素
max() 最大
min() 最小
frequency() 指定集合中元素出现的次数
copy() 复制
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)