2014-09-19 80 views
1
我有時間的範圍

一個數組,我要作爲排序依據的起始時間 對於防爆時間:排序在Java

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; 
} 

我有上述的結構,我想它相對於開始進行排序;你
i.e Collections.sort(interval) // with respect to start;

回答

0

只是一個提示會不會寫代碼,直到你展示一些更多的努力

你自己比較落實,並通過這個作爲參數傳遞給Collections.sort

另一個要考慮的確保你不要做新的比較器,因爲這會繼續製作比較器的新實例。你想讓它成爲單身。

+3

我完全同意你的看法,但這不是一個答案。這更像是評論!到目前爲止,我不會標誌你。 – eliasah 2014-09-19 17:06:21

+2

我說是因爲我說我會把代碼放在OP顯示更多努力的答案。下一次將會發表評論。 – StackFlowed 2014-09-19 17:07:19

3

使用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); 
    } 
}); 

編碼,這將可以實現在intervalComparable<T>接口的另一種方式。

1

您有2個選項可以爲您的班級實施Comparable或使用比較器。用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 
    } 
} 
0

要建立在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); 
    } 
} 

請注意,習慣上使用大寫字母作爲類名,因此請將「間隔」更改爲「間隔」。