Comparable
接口 只定义了一个抽象方法compareTo(T o)
实现有很多:Integer、Long、Double等常用的封装类都集合
可以称为内比较器
:可以和自己比较的
Comparator
接口抽象方法很多。与之相同的方法compare(T o1, T o2)
可以看到需要传入两个需要比较的对象
比如 List的sort(Comparator<? super E> c)
可以称为外比较器
Comparator
和Comparable
的区别
一个类实现了Camparable
接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort
方法排序。
Comparator
可以看成一种算法的实现,将算法和数据分离,Comparator
也可以在下面两种环境下使用:
- 类的设计师没有考虑到比较问题而没有实现
Comparable
,可以通过Comparator来实现排序而不必改变对象本身 - 可以使用多种排序标准,比如升序、降序等
如果实现类没有实现
Comparable
接口,又想对两个类进行比较既可以使用Comparator
Comparator
是典型的策略模式。耦合性比较低