[英]Understanding Java Sorting a 2D-Array using Arrays.sort()
我正在研究 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、零或正 integer 來確定第一個參數是小於、等於還是大於第二個參數。 Integer.compare(int,int)
方法的工作方式相同,只是使用int
arguments。
Arrays#sort(...)
使用的排序算法遍歷數組並使用Comparator
比較其元素。 該算法將根據需要多次咨詢Comparator
,使用比較結果來確定需要移動哪些元素,直到對數組進行排序。
二維數組本質上只是一個 arrays 的數組。 所以發生的事情是“外部”數組正在根據“內部”arrays 的索引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[][]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.