1. 有些类是直接实现了Comparable接口的,这个时候如果要改写排序条件,就直接改写Comparable接口的CompareTo方法

  2. 有些类不是用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...


刘牟默
11 声望4 粉丝

霸道java娇俏C