簡體   English   中英

用Java對數組排序

[英]Sorting an array in java

我有一個時間范圍,我想根據Ex的開始時間對時間進行排序:

Range = {[3,5] , [1,10] ,[6,7] ,[4,10]}
After sorting
{ [1,10] , [3,5] , [4,10] , [6,10]}

如何使用Collections.sort或任何其他方法來完成。
我需要定義一個類別進行排序嗎

class interval{
int start;
int end;
}

我具有上述結構,我想就開始進行排序;
ie Collections.sort(interval) // with respect to start;

Collections.sort與自定義Comparator<T>

Collections.sort(times, new Comparator<interval>() {
    public int compare(interval a, interval b) {
        int res = Integer.compare(a.start, b.start);
        if (res != 0) return res;
        return Integer.compare(a.end, b.end);
    }
});

對此進行編碼的另一種方法是在interval類中實現Comparable<T>接口。

您有2個選項可以為您的類實現Comparable或使用Comparator。 使用Java 8語法,它將看起來像這樣

Collections.sort(list, (o1, o2) -> {
            int start =  Integer.compare(o1.getStart(), o2.getStart());
            int end =  Integer.compare(o1.getEnd(), o2.getEnd());
            if (start != 0) return start;
            else return end;
        });

要實現可比,您應該這樣做

    class interval implements Comparable<interval> {
@Override
    public int compareTo(interval o) {
        //the same logic as used in compartor
    }
}

直到您付出更多努力,才有可能為您編寫代碼

實現您自己的比較器,並將其作為參數傳遞給Collections.sort

要考慮的另一件事是確保您不做新的Comparator,因為這將使您繼續創建比較器的新實例。 您要使其單例。

要建立在dasblinkenlight答案的基礎上,要通過在間隔中實現Comparable接口來實現此目的,請執行此操作

class interval implements Comparable<interval> {
  // old code
  public int compare(interval a, interval b) {
    int res = Integer.compare(a.start, b.start);
    if (res != 0) return res;
    return Integer.compare(a.end, b.end);
  }
}

請注意,習慣上使用大寫字母作為類名,因此請將“ interval”更改為“ Interval”。

暫無
暫無

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

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