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
的情况。