簡體   English   中英

在Java中對ArrayList進行排序

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

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