2011-06-25 100 views
17

比較器中的返回值實際上是什麼意思?比較器的返回值

例如:

class TreeSetDemo 
{ 
    public static void main(String arg[]) 
    { 
     TreeSet t=new TreeSet(new MyComparator()); 
     t.add(new Integer(20)); 
     t.add(new Integer(10)); 
     t.add(new Integer(30)); 
     t.add(new Integer(100)); 
     System.out.println(t); 
    }  

    class MyComparator implements Comparator 
    {  
     public int compare(Object o1, Object o2) 
     { 
      return 0; 
     } 
    } 
} 

如果返回類型爲1,則其實際上返回

[20,10,30,100]

如果返回類型是-1,則其實際返回

[100,30,10,20]

如果返回類型爲0,那麼它實際上返回

[20]

請告訴我這說明什麼?

+3

通常「0」表示「==」,「1」表示「>」,「-1」表示「<」 –

+2

「1」,「-1」和「0」不是類型,而是值。 –

+1

比較器的功能在其文檔中有很好的闡述。嘗試閱讀一點之前,只是問一個問題。 – Dunes

回答

48

返回value(不type,類型爲int)告訴來電者(的東西對數據進行排序):

-1 : o1 < o2 
0 : o1 == o2 
+1 : o1 > o2 

如果你總是返回相同的值(-1 O,1)比較器,無論它是什麼輸入,那麼你都沒有正確使用它。您需要根據傳入的值返回值。想法是數據結構(或分類器)在需要訂購兩個元素時調用比較函數,以找出將它們放入的順序。

值得注意的是正/負整數值(-1,+1)不需要是1,它們可以是任何正數/負數。返回-1/+ 1是通常的做法。

0

這是關於需要比較的排序算法。

正確:

class MyComparator implements Comparator<Integer> { 
    public int compare(Integer o1, Integer o2) { 
     return o1.complare(o2); 
    } 
} 
1

你是混亂返回類型返回值。返回類型是int。返回值是在documentation描述:

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

0

根據您希望如何基於此比較器進行排序,您需要在比較器中放置一些邏輯。你比較只會返回0,這意味着等於

class MyComparator implements Comparator { 

    public int compare(Object o1, Object o2) { 
     // TODO Auto-generated method stub 
     return o1.compareTo(o2); 
    } 
} 
+1

我不認爲這會編譯,因爲'對象'沒有可比性。 –

1

的比較方法是利用這裏是錯誤的,但對於澄清你的疑問,爲什麼只有當返回值爲0被寫入[20] ... ID

你是使用不具有相同值的TreeSet(屬性集)。因此,當比較值並返回值爲時,Java將它們視爲相等並僅保留第一個值。因此,你只能看到一個值。