集合排序Comparator和Comparable的使用区别
Comparable可以认为是一个内比较器,而Comparator可以认为是一个外比较器。下面看一下如何进行集合排序,常用的方法有: Comparator
和Comparable
一、Comparator接口
Comparator可以认为是是一个外比较器,在比较的Bean上不用做任何改变,但是需要新建一个比较类实现Comparator接口并重写compare方法
自定义类使用步骤:
- 新建比较类,
- 实现Comparator接口,
- 重写compare方法
通过Collections.sort排序
1 | package sort; |
- 调用
Collections.sort()
方法进行排序, - 形式:
Collections.sort(集合, 比较器实例)
1 | public class MyTest { |
test1输出:
1 | 排序前: |
test2输出:
1 | 排序前: |
Bean类如下(不用实现任何接口):
1 | package sort; |
通过Arrays.sort排序
1 | //通过Arrays.sort排序 |
输出
1 | test3排序后: |
二、Comparable接口
Comparable可以认为是一个内比较器,在要比较的Bean上需要实现Comparable接口并重写其compareTo方法才行。
使用步骤:
- 新建Bean
- 实现Comparable接口,
- 重写compareTo方法,
通过Collections.sort排序
新建Bean并实现Comparable接口
1 | package sort; |
- 调用
Collections.sort()
方法进行排序, - 形式:
Collections.sort(集合)
1 | public class MyTest2 { |
通过Arrays.sort排序
1 |
|
输出:
1 | test2排序后: |
三、Comparator自定义数组比较规则
先看两个小例子:
1 | //例子一 |
输出:
1 | 1 2 3 4 5 |
实验一:
1 | int[] arr3={5,2,3,1,4}; |
实验二:
1 | int[][] arr4={{3,2},{4,1},{5,4},{3,4}}; |
输出:
1 | 3 4 |
再来一个小例子:
1 | int[][] arr={{3,1},{2,4},{1,3},{2,2},{3,1}}; |
输出:
1 | 1 3 |
四、小结
- Collections.sort排序的是容器
- Arrays.sort排序的是普通数组
- 如果是Bean,一定要可比较,即要么用Comparator,要么用Comparable
- 因为Comparator是外部的,可以通过匿名实现接口的形式,这样就不用新建一个比较类了