2009-07-07 24 views
22

Hier ist das Stück Code, das ich für Java 5,0TreeSet Elemente bestellen in absteigender Reihenfolge

TreeSet<Integer> treeSetObj = new TreeSet<Integer>(Collections.reverseOrder()) ; 

Collections.reverseOrder() verwendet wird, verwendet einen Komparator zu erhalten, um die Art und Weise, die zu umkehren Elemente werden gespeichert und iteriert.

Gibt es einen optimierten Weg?

+2

Flip die Reihenfolge der '' 'this''' und' '' that''' in der überschriebenen '' 'compareTo''' so Gegenstände in umgekehrter Reihenfolge eingeführt werden. – opyate

Antwort

35

Warum wird dieser Ansatz Ihrer Meinung nach nicht optimiert? Die umgekehrte Reihenfolge Comparator wird einfach das Vorzeichen der Ausgabe von der tatsächlichen Comparator (oder Ausgabe von compareTo auf die Comparable Objekte eingefügt werden), und ich würde mir daher vorstellen, es ist sehr schnell.

Ein alternativer Vorschlag: Anstatt die Reihenfolge zu ändern, in der Sie die Elemente speichern, können Sie sie in absteigender Reihenfolge über die Methode descendingIterator() durchlaufen.

+1

Danke. absteigendIterator() -Methode wurde in 6.0 eingeführt und war nicht in 5.0 –

4
TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>() 
    { 
    public int compare(Integer i1,Integer i2) 
     { 
     return i2.compareTo(i1); 
     } 
    }); 

muss das Ergebnis gewendet werden. Aber ich denke, das ist nur eine Mikro-Optimierung ... Brauchen Sie das wirklich?

+0

Nein, das wird nicht erforderlich sein. –

9

Wenn Sie mit Java 6, gibt es eine Methode aufgerufen wird descendingSet().

descendingSet

öffentlicher NavigableSet descendingSet()

Der absteigende Satz dieses Set gesichert, so dass Änderungen an die Menge ist spiegelt sich in der absteigenden Menge und umgekehrt. Wenn einer der Sätze geändert wird, während eine Iteration über einen der beiden Sätze in Bearbeitung ist (außer durch die eigene Entfernungsoperation des Iterators ), sind die Ergebnisse der Iteration undefined.

The returned set has an ordering equivalent to 

Collections.reverseOrder (Komparator()). Der Ausdruck s.descendingSet(). AbsteigendSet() gibt eine Ansicht von s im Wesentlichen entspricht s zurück.

Specified by: 
     descendingSet in interface NavigableSet<E> 

    Returns: 
     a reverse order view of this set 
    Since: 
     1.6 
Verwandte Themen