Java——集合的排序
<一>接口comparable与接口comparator的比较
1> Comparable
Comparable是在集合内部定义方法实现的排序,位于java.lang包下。是一个对象本身就已经支持自然比较所需要实现的接口。例如String,Interger自己就实现了Comparable接口,并且重写了compareTo方法,可以完成比较大小操作。自定义类要在加入list容器后能够排序,也可以实现Comparable接口,在使用Collections类的sort方法排序时若不指定Comparator,那就以自然顺序排序。所谓自然顺序就是实现Comparable接口设定的排序方式
2> Comparator
Comparator是在集合外部实现的排序,位于java.util包下。是一个专用的比较器,当这个对象不支持自比较或者自比较函数(compareTo())不能满足要求时,可以写一个比较器来完成两个对象之间大小的比较。使用时大多是先构造一个比较器,再通过调用某些sort()方法作参数传入之后进行排序
<二>接口comparable与接口comparator的使用
1> Comparable
- List:由于一些包装类型(如String,Interger)已经实现了Comparable接口,并且重写了comepareTo()方法,所以写出如下代码
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("bbb");
list.add("cba");
list.add("acd");
list.add("zhang");
list.add("shi");
list.sort(null);
System.out.println(list);
}
}
这里显示运行结果是排好序的。我们可以注意到list.sort()方法里写的是null,这里其实是需要一个自己构造的比较器,但是这里传入null,说明没有比较器,以自然顺序(String类内的compareTo方法)进行排序
- 我么们也可以这么排序:
Collections.sort(list);
结果是一样的,下面我们来实现一个自定义类
class Person implements Comparable<Person>{
private int age;
private String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return