参考:https://www.cnblogs.com/szlbm/p/5504634.html
https://www.cnblogs.com/xujian2014/p/5215082.html
- Comparable是排序接口,如果一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的集合或数组可以通过Collections.sort或Arrays.sort进行自动排序;此接口只有一个方法compareTo
- 如果一个类(常是自定义类)想使用Arrays.sort或是Collections.sort进行自动排序,就需要实现Comparable接口,重写compare方法
- Comparator是比较接口,如果需要控制某个类的次序,而该类本身并不支持排序(未实现Comparable接口),则可以建立一个该类的“比较器”,通过该比较器对类进行排序
- Comparator接口有两个方法:compare和equals
- 比较器可以作为参数传入Arrays.sort()或Collections.sort()中
- Comparable相当于“内部比较器”,Comparator相当于“外部比较器”;实现Comparable接口的对象直接就成为一个可以比较的对象,但是需要修改源代码;用Comparator的好处是不需要修改源代码,当某个自定义的对象需要作比较时,将比较器和对象一起传递过去就可以比大小,并且Comparator里面用户可以自己实现复杂的通用的逻辑
- 一些数据结构也支持传入Comparator 作为外部比较器:PriorityQueue<>、TreeSet<>等;