集合排序
- 集合中的基本数据类型排序
- 集合中的字符串排序
- Comparator接口
- Comparable接口
java.util.Collections
对集合的整数或字符串进行排序Collections.sort(list);
Comparator接口
boolean equals(Object obj)指示某个其他对象是否“等于”此Comparator
此方法可以被Object类中的equals方法覆盖,不必重写;
实现Comparator接口,重写compare方法,例(按name排序):
//降序排序调换name2和name1即可
int compare(T o1,To2) 比较用来排序的两个参数
or<or,返回负整数
o1==o2,返回0
o1>o2,返回正整数
传入要排序的集合对象和实现接口类的对象即可完成排序
如果要按照其他属性排序,再定义一个接口的实现类
Comparable接口
java.lang.Comparable
int compareTo(T o)
跟Comparator的区别:在定义要排序的类时就实现该接口
调用sort方法排序
compareTo方法
Comparator和Comparable的区别
5-3 Comparable和Comparator的区别
前面我们已经学习过Comparator和Comparable接口的使用,下面来总结一下二者的区别。
1、Comparator接口位于java.util包下,而Comparable接口位于java.lang包下
2、对于Comparator接口,可以看到它的compare()方法的参数是两个对象,比如我们队Cat类进行比较,那么这里就是两个
要比较的Cat类的对象,所以可以有一个单独的类实现Comparator
对于Comparable接口,它的方法只有一个对象作为参数,所以要比较的类需要实现Comparable接口,将当前对象与方法参
数中的对象进行比较。
因此,如果使用Comparator接口,那么要比较的类和实现Comparator接口的类可以分开,如果使用Comparable接口,那么
要比较的类就要实现Comparable接口才可以。
3、关于应用场景
一般情况下如果对某个类进行排序,比如Cat类,如果使用Comparable接口的方式,那么Cat类需要实现Comparable接口。
如果Cat类通过Comparable接口的方式实现排序,比如通过name排序了。那么我们还希望通过age进行排序,这时不希望
修改Cat类,那此时就需要使用Comparator接口了
因此,Comparable接口可以作为实现类的默认排序算法,Comparator接口则用于一个类的扩展排序