[英]Collections.Sort an ArrayList in java
我在Java中使用此功能:
Collections.sort(an Arraylist, new CustomComparator);
CustomComparator類中的compare方法將返回一個int。 這對排序程序意味着什么? 該值的數目是多少,將如何影響排序過程?
更具體地說,我想在compare方法中比較兩個值。 這是我的代碼:
import java.util.Comparator;
public abstract class CustomComparator implements Comparator<HLine> {
@Override
public int compare(HLine hl1, HLine hl2) {
return hl1.y < hl2.y;
}
}
我呼吁排序:
Collections.sort(hlines, new comparator());
hlines是具有Point和兩個double的對象的Arraylist。 我想比較兩個對象中的第二個double。
基本上,如Comparator.compare和Comparable.compareTo的Javadoc中所述,這些方法將返回
作為第一個參數小於,等於或大於第二個參數的負整數,零或正整數。
意思是如果你打電話
new Integer(1).compareTo(0)
它將返回一個負整數,表示必須在1之前對0進行排序。
new Integer(1).compareTo(1)
它將返回0,表示兩個值必須在同一級別上排序。
new Integer(1).compareTo(2)
它將返回一個正整數,表示2必須在1之后排序。
要修復您的代碼樣本,您需要重寫compare()
以便它返回一個Integer
,因為現在它返回一個boolean
並且不會編譯。
因為您正在嘗試比較double
,所以可以簡單地更改為
@Override
public int compare(HLine hl1, HLine hl2) {
return hl1.y - hl2.y;
}
sort()方法對元素進行排序,但首先將它們進行比較。出於比較的目的,sort()方法可以使用compare()或compareTo()方法。
現在,如果您只想基於一個屬性對元素進行排序,請使用可比接口的compareTo()方法。
並且,如果要基於多個元素對元素進行排序,請使用比較器接口的cmopare()方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.