簡體   English   中英

了解 Java 使用 Arrays.sort() 對二維數組進行排序

[英]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
    }
  }
});

假設pointsint[][]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM