问题描述
我正在研究一个 Leetcode 问题(452。爆破气球的最小箭头数)。我遇到一个用户将他们的二维数组排序为:
Arrays.sort(points,(a,b) -> Integer.compare(a[1],b[1]));
我仍在努力习惯使用 Java,我不清楚使用 Integer.compare(a[1],b[1])
背后的逻辑。
这如何定义它的排序方式?非常感谢有关为什么使用这种方法对二维数组进行排序的解释和观点。
解决方法
(a,b) -> Integer.compare(a[1],b[1])
是一个 lambda 表达式,在本例中是 Comparator#compare(T,T)
的实现。该方法通过分别返回负整数、零或正整数来确定第一个参数是小于、等于还是大于第二个参数。 Integer.compare(int,int)
方法的工作方式相同,只是使用 int
参数。
Arrays#sort(...)
使用的排序算法迭代数组并使用 Comparator
比较其元素。该算法将根据需要多次查询 Comparator
,使用比较的结果来确定需要移动哪些元素,直到对数组进行排序。
二维数组本质上只是数组的数组。所以发生的事情是根据“内部”数组的索引 1
处的值对“外部”数组进行排序。
如果您仍然不确定 lambda 表达式,则其等效于以下内容:
Arrays.sort(points,new Comparator<int[]>() {
@Override
public int compare(int[] a,int[] b) {
int a1 = a[1];
int b1 = b[1];
// Integer.compare(a1,b1)
if (a1 < b1) {
return -1; // negative = less than
} else if (a1 == b1) {
return 0; // zero = equal to
} else {
return 1; // positive = greater than
}
}
});
假设 points
是一个 int[][]
。