2011-06-25 18 views
17

Co oznacza wartość zwracana przez Komparator?Typ zwrotu z Komparatora

Na przykład:

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; 
     } 
    } 
} 

Jeżeli typem jest równa 1, a następnie jego rzeczywiście powraca

[20, 10, 30, 100]

Jeżeli typ zwrotny jest -1, a następnie faktycznie wraca

[100, 30, 10, 20]

Jeśli typem zwracanym jest 0, to jego faktycznie powrocie

[20]

Proszę mi powiedzieć, co to wskazuje?

+3

zwykle '0' oznacza' == ',' 1' wskazuje '>', a '-1' wskazuje' <' –

+2

" 1 "," -1 "i" 0 "nie są typami, ale wartościami. –

+1

To, co porównuje, jest bardzo dobrze określone w jego dokumentacji. Spróbuj trochę przeczytać, po prostu zadaj pytanie. – Dunes

Odpowiedz

48

Zwrot value (nie type, typ jest int) informuje rozmówcę (rzeczą sortowania danych):

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

Jeśli zawsze powrócić tą samą wartość (o, 1, -1) Komparator, niezależnie od jego danych wejściowych, nie używa go poprawnie. Musisz oprzeć wartość zwróconą na przekazywanych wartościach. Chodzi o to, że struktura danych (lub sorter) wywołuje funkcję porównania w dowolnym momencie, kiedy potrzebuje zamówić dwa elementy, aby dowiedzieć się, w jakiej kolejności je umieścić.

Warto zauważyć, że dodatnie/ujemne liczby całkowite (-1, +1) nie muszą być równe 1, mogą to być dowolne liczby dodatnie/ujemne. Powszechną praktyką jest zwracanie -1/+ 1.

0

Chodzi o algorytm sortowania, który należy porównać.

Poprawnie:

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

Jesteś mylące powrót typu i powrotu wartość. Typ zwrotu to int. Wartość powrotna jest opisany w documentation:

Zwraca dodatnią liczbę całkowitą zero, lub dodatnia jak pierwszy argument jest mniejszy, równy lub większy niż drugi.

1

Comparator documentation - Zwraca: ujemną liczbą całkowitą, zero lub dodatnią liczbą całkowitą, jak pierwszy argument jest mniejszy, równy lub większy niż drugi.

0

W zależności od tego, jak chcesz sortować w oparciu o ten komparator, musisz umieścić trochę logiki w komparatorze.Twój Komparator zwraca tylko 0, co oznacza równy

class MyComparator implements Comparator { 

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

Nie sądzę, że to się skompiluje, ponieważ 'Obiekt' nie jest porównywalny. –

1

sposób komparator wykorzystała tu jest źle, ale za wyjaśnienie wątpliwości, dlaczego tylko [20] id zapisywane gdy zwracana jest wartość 0 ...

Jesteś przy użyciu parametru TreeSet, który nie zawiera identycznych wartości (Właściwość zestawu). Więc gdy wartości są porównywane, a wartość zwracana to zero, Java traktuje je jako równe i zachowuje tylko pierwszą wartość. Dlatego widzisz tylko jedną wartość w zamian.

Powiązane problemy