Java服务_比较器Comparable和Comparator区别
Comparable:
1 | package java.lang; |
- Comparable是一个排序接口,如果一个类实现了该接口,就意味着该类支持排序,该类的实例化对象具有可比较性。
- 在类中重写compareTo方法,定义该类的实例化对象的大小比较准则。
- 实现该接口时泛型T写成实现它的类。
Comparator:
1 | package java.util; |
- Comparator是比较器接口,当我们要控制某个类的实例化对象的次序,使其具有可比较性,但是该类本身没有实现Comparable接口时,我们可以新建一个Comparator接口的实现类,用于比较该类实例化对象的大小。
- 在该比较器实现类中重写compare方法,定义需要比较大小的实例化对象的比较准则。
- 编写实现类时泛型T写成需要比较大小的类,且这种比较器实现类最常用的情况就是匿名类,如下代码:
1 | Collections.sort(list2,new Comparator<Person2>(){ |
- Comparator接口中的equals方法并不一定要实现,因为Java中的Object类已经实现类一种equals方法,如果想要不同的方法内容才需要重写。
排序规则
1 | //Comparator |
也就是说,对于Comparator的compare()方法,当返回值为负值时,排序时会把第二个参数obj2放在第一个参数obj1后面;当返回值为正数时,会把第二个参数obj2放在第一个参数obj1前面。
Comparable与Comparator的区别
- 想要一个类的实例化对象具有可比较性时,使该类实现Comparable接口就必须改变类自身,即在自身类中实现接口中相应的方法;而使用Comparator接口则是另外创建一个类使其实现该类的可比较性。
- 像String这种JDK中已经定义死的类,我们可以运用Comparator重写String大小比较方法;或者一些无法继承其他类或者接口的类的可比较性也只能由Comparator来实现。
- Comparable相当于和一个具体类绑定;Comparator比较灵活,可以被用于各个需要比较功能的类使用。
- Comparable相当于一个内部比较器,而Comparator相当于一个外部比较器。