2013-08-25 69 views
1

一個ArrayList我在Java中使用此功能:Collections.Sort在Java

Collections.sort(an Arraylist, new CustomComparator); 

在CustomComparator類的比較方法會返回一個int。這對排序過程意味着什麼?這個值的數量是多少以及如何影響排序過程?

更具體地說,我想比較方法來比較兩個值。這裏是我的代碼:

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是一個對象的一個​​點和兩個雙打的ArrayList。我想比較兩個對象中的第二個double。

+1

你檢查過javadoc嗎? – Reimeus

+0

閱讀此:http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html –

+0

我不知道,直到我讀你的問題,並檢查文檔。 – Maroun

回答

0

基本上,如在Comparator.compareComparable.compareTo的Javadoc指出這些方法返回

負整數,零,或作爲第一個參數的正整數是小於第二小於,等於或大於。

這意味着,如果你調用

new Integer(1).compareTo(0) 

它會返回一個負整數,這表明,這0有購買後1

new Integer(1).compareTo(1) 

它將返回0,表明,這兩個值必須在同一級別上進行排序。

new Integer(1).compareTo(2) 

它會返回一個正整數,這表明,這2有1

後,責令其解決您codesample,你需要重寫compare()所以它會返回一個Integer,因爲它是現在它返回一個boolean並且不會編譯。

因爲您正在嘗試比較double是你可以簡單地切換到

@Override 
    public int compare(HLine hl1, HLine hl2) { 
     return hl1.y - hl2.y; 
    } 
-1

sort()方法排序的元素,但首先他們是compared.For比較而言,sort()方法可以使用比較( )或compareTo()方法。

現在,如果要在僅對一個屬性使用compareTo()方法的可比接口的基礎上對元素進行排序。

如果要基於多個元素對元素進行排序,請使用比較器接口的cmopare()方法。

+0

-1,因爲compareTo()和compare()都不會限制比較中使用的屬性數量。唯一的區別是,Comparable需要在需要比較的類中實現。如果你使用比較器,類本身不需要實現Comparable,如果你有多個不同的比較,它會很有用。 – Pr0gr4mm3r