有些类是直接实现了Comparable接口的,这个时候如果要改写排序条件,就直接改写Comparable接口的CompareTo方法
有些类不是用Comparable接口,而是用了个Comparator类,这时候改写Compare方法
Comparable接口:
只有一个方法compareTo(T o). 具体实践中一般写作o与某个的比较,比如o.age - this.age.
Comparator类:
1) int compare(T o1, T o2) o1,o2比较(>, < , =)
2) boolean equals(Object obj)
*排序时重写comparator:
有些类在构造时可以加Comparator参数,比如PriorityQueue,默认是从小到大排序,如果要改写可以加入一个重写了compare方法的comparator
Comparator<Integer> revCmp = new Comparator<Integer>() {
@Override
public int compare(Integer left, Integer right) {
return right.compareTo(left);//原本应该是left.compareTo(right)
}
};
Queue<Integer> Maxqueue= new PriorityQueue<Integer>(k, revCmp);
注意这里compareto方法也是Integer类自带的
记录一些的改写Comparator的情况
1) Arrays.sort() 对二维数组
新构建一个comparator重写compare函数,将比较的内容变成两个二维数组
arr2D:二维数组
Arrays.sort(arr2D, new Comparator<int[]>(){
public int compare(int[] arr1, int[] arr2){
if(arr1[0] == arr2[0])
return arr2[1] - arr1[1];
else
return arr1[0] - arr2[0];
}
});
2) 对一个类的list进行排序
arrays很容易想到Arrays.sort()的comparator改写,对于list则注意是Collections.sort()改写.Collections还包括list, queue, set...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。