[英]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.