1、Comparable接口
1 | package java.lang; |
列表和数组中的对象,如果实现了Comparable接口,就能直接通过Collections.sort(List)和Arrays.sort(Object[])进行排序。
实现了Comparable接口的对象,可以用作SortedMap中的键或SortedSet排序集中的元素,且无需指定 Comparator比较器。
比如 Integer 类:
1 | public final class Integer extends Number implements Comparable<Integer> { |
使用自然排序需要类实现 Comparable,并且在内部重写 comparaTo 方法。
2、Comparator比较器
1 | package java.util; |
我们如果想让类保持它的原貌,不想修改类使主动实现 Comparable 接口,但又需要它们之间进行比较,这就需要用到Comparator接口。
示例:
1 | /*User类*/ |
1 | /*将自定义比较器 UserComparator 对象作为参数传递给排序类的某个方法。*/ |
3、两者比较:
使用自然排序需要类实现
Comparable,并且在内部重写comparaTo方法。Comparator则是在外部制定排序规则,然后作为排序策略参数传递给某些类,比如Collections.sort (),Arrays.sort(),或者一些内部有序的集合(比如SortedSet,SortedMap等)。
在定义比较方法中,需要考虑 null 的情况。