Comparable 和 Comparator 均是 Java Core API。
Comparable 和 Comparator 都是用于实现集合或数组中元素的排序的。
Comparable 在元素内部定义的方法实现的自身和其他元素的排序,其自然排序只可以选择升序或降序一种。
Comparator 在元素外部定义的类实现的两个元素之间的排序,单一比较器内部排序规则只可以选择升序或降序一种,但是可通过多个比较器实现不同的排序规则。
Comparable 接口
1 | class User implements Comparable<User> { |
1 | User userA = new User(); |
1 | [User{name='b', idCard='2234567'}, User{name='a', idCard='1234567'}] |
如果想实现降序的自然排序,只能修改 User 类的 compareTo 方法:1
2
3public int compareTo(User o) {
return o.getIdCard().compareTo(getIdCard());
}
若想实现多样性的比较和排序,需要依赖于 Comparator。
Comparator 接口
Comparator 使用策略模式,实现比较方式的多样性和排序的多样性。在使用时选择不同的 Comparator 比较器即可。
升序排序:1
2
3
4
5
6
7
class UserAsoSortComparator implements Comparator<User> {
public int compare(User o1, User o2) {
return o1.getIdCard().compareTo(o2.getIdCard());
}
}
降序序排序:1
2
3
4
5
6
7
class UserDesoSortComparator implements Comparator<User> {
public int compare(User o1, User o2) {
return o2.getIdCard().compareTo(o1.getIdCard());
}
}
使用时指定 Comparator:1
Collections.sort(userList, new UserAsoSortComparator());