Arrays.sort(people, (n1, n2) -> (n2[0] == n1[0])? n1[1] - n2[1] : n2[0] - n1[0]);
Run Code Online (Sandbox Code Playgroud)
或者
Arrays.sort(people,new Comparator<int[]>(){
@Override
public int compare(int[] n1, int[] n2){
return (n2[0] == n1[0])? n1[1] - n2[1]: n2[0] - n1[0];
}
});
Run Code Online (Sandbox Code Playgroud)
这两者都执行相同的操作。
输入: [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
输出: [[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]]
我知道代码是按组对它进行排序的,但我不明白是如何进行的。我同样对 Java 中的 PriorityQueue 感到困惑:
PriorityQueue<Integer> pq = new PriorityQueue<>((a, b)-> b - a);
Run Code Online (Sandbox Code Playgroud)
这是按降序排列的。
有人可以解释一下吗?如果有任何此类材料,我可以在哪里学习或阅读有关这些“覆盖”的更多信息?
箭头符号是一个 lambda 函数,是相同 Comparator 实现的简写。这就是为什么您会看到相同的结果。这不是关于@Override这里,你要问的是 Comparator 是如何工作的。
比较器按以下顺序订购 2 个对象:
因此,对于优先级队列部分,当比较器对 1、4、6、3 进行排序时,它会比较数组的元素,如果差值为负,则交换它们,例如,它会交换 1 和 4、4 和 6 等。
对于问题的第一部分,您正在使用此实现:
(n2[0] == n1[0])? n1[1] - n2[1]: n2[0] - n1[0]
对于 2 大小的整数数组,您将按如下方式比较数组。
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |