【发布时间】:2021-11-10 04:57:50
【问题描述】:
hlo 我总是很困惑为什么我们使用 (a,b) -> a-b 进行排序。
例子-
Collections.sort(list, (a, b) -> { return (a[1] - b[1]); });
PriorityQueue MaxHeap = new PriorityQueue((a,b) -> a-b);
我真的很困惑,我试图通过调试代码来理解这个语句的流程。
ArrayList<int[]> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(new int[] { start[i], end[i] });
}
Collections.sort(list, (a, b) -> {
return (a[1] - b[1]);
});
int count = 1;
int[] x = list.get(0);
for (int i = 1; i < list.size(); i++) {
int[] res = list.get(i);
if (x[1] < res[0]) {
count += 1;
x = res;
}
}
return count;
}
如果有人有更好的方法来理解这一点,请帮助我。
【问题讨论】:
-
a - b 为您提供有效的比较结果。 0 -> 相等,正 -> a > b,负 -> a
-
如果
a[1] - b[1]小于0,则表示a[1]小于b[1];同样,如果a[1] - b[1]大于0,则意味着a[1]大于b[1];如果a[1] - b[1]为0,则表示a[1]等于b[1] -
基本原因是你不能保证
<在进行排序时会比较你想要的方式,所以你需要提供代码。 -
@DownloadPizza - 它不一定有效。如果
a和b是(比如说)int并且值可以是任何整数,那么这个实现可能会给出错误的答案。 -
@StephenC 你说得对,我忘了java默认不检查下溢
标签: java arrays sorting collections java-8