java中的比较器comparator和compare
比较器可以理解为冒泡排序算法。返回值大小,会让比较器去判断两个数要不要交换位置。比如: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交换位置
·
比较器可以理解为冒泡排序算法。
返回值大小,会让比较器去判断两个数要不要交换位置。
比如: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的元素值
}
}
});
更多推荐
所有评论(0)