比较器可以理解为冒泡排序算法。
返回值大小,会让比较器去判断两个数要不要交换位置。
比如:int nums={1,3,2};
compare方法内,如果是return nums[0]-nums[1]=1-3=-2,返回小于0,说明不用交换位置。
如果是return nums[1]-nums[0]=3-1=2,返回大于0,说明要交换位置,也就是3和1位置交换了,那么就变成降序了。

也就是说返回值大于0交换位置,不大于0的不交换位置。

那么第一参数减第二个参数会使数组升序排序,而第二个参数减第一个参数会使数组降序排序。

compare方法里的参数来源有类似遍历的意思:

就好像用一维数组遍历二维数组 for(int[] : 二维数组或二维列表) sort里的compare参数已经默认在最外面的一个数组或列表里面了。

以leetcode第406题根据身高重建队列中的比较器来举例:

        Arrays.sort(people, new Comparator<int[]>(){ 
            public int compare(int[] person1, int[] person2){
                if(person1[0] != person2[0]){
                    return person2[0] - person1[0]; //第二个参数减第一个参数会使其降序排序
                                                    //中括号[]内是0就是比较左端点
                }else{
                    return person1[1] - person2[1]; //第一个参数减第二个参数会使其升序排序
                                                    //中括号[]内这是1就是比较序列1的元素值
                }

            }
        });

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐