当需要排序的集合或者数组中的元素不是单纯的数字即复杂对象的时候,通常我们需要借助接口Comparator或者Comparable。
1. Comparator
此接口有一个需要实现的方法如下:
Comparator接口使用案例:
或者:
测试方法:
或者:
输出:
2. Comparable
此接口有一个需要实现的方法如下:
Comparable接口使用案例如下:
测试方法如下:
输出:
两个接口的异同:
相同点:1. 都需要借助集合类的辅助类Collections对象的sort方法来完成集合的排序,当如数组排序需要借助Arrays对象的sort方法。
2. 都可以完成集合元素的升、降序排序。
不同点:使用Collections对象的sort方法不同,Collections对象有两个重载方法,如下:
以上两个方法来自于JDK源码,现在可以看出Collections对象的两个重载sort的区别了吧,一个是需要传入一个实现了Comparable接口的对象的集合,而另一个是需要传入一个普通对象的集合和一个实现了Comparator接口的比较器对象。
经过以上比较和举例其实大家都可以看出这两个接口的利弊了,Comparator接口将排序算法和对象数据分离开了,即排序的对象和比较器分离开了,此种做法不必改变排序对象本身代码,更适合软件设计前期类的设计者没有考虑到此对象需要排序而没有实现Comparable接口的情况。