Comparable 与 Comparator 的比较
1. Comparable
- Comparable 是一种排序接口,只要实现 Comparable 接口的对象就可以直接成为一个可以比较的对象,但是需要修改源代码,即必须重写 compareTo() 方法,在里面设计需要比较的属性;
- Comparable 虽然简单但一般很少用,因为被 Comparator 替代了;
- compareTo() 方法如下:
public interface Comparable<T> {
public int compareTo(T o);
}
import java.util.ArrayList;
import java.util.Collections;
class User implements Comparable<User> {
private Integer id;
public User(Integer id) {
this.id = id;
}
public Integer getId() {
return id;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
'}';
}
@Override
public int compareTo(User o) {
if (this.id > o.getId()) {
return 1;
} else if (this.id < o.getId()) {
return -1;
} else {
return 0;
}
}
}
public class Test {
public static void main(String[] args) {
ArrayList<User> al = new ArrayList();
al.add(new User(3));
al.add(new User(5));
al.add(new User(4));
System.out.println(al);
Collections.sort(al);
System.out.println(al);
}
}
2. Comparator
- Comparator 是一种比较器,没有实现 Comparable 接口的对象也能使用它,不需要修改源代码;
- 比较某个对象时,比较器和对象被一起传递过去, 并且在 Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象;
Collections.sort(list, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});