2009-07-07 17 views
22

Qui discendente è il pezzo di codice che ho usato per Java 5,0TreeSet ordinare elementi per

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

Collections.reverseOrder() viene utilizzato per ottenere un comparatore al fine di invertire il senso della gli elementi sono memorizzati e iterati.

Esiste un modo più ottimizzato per farlo?

+2

capovolgere l'ordine di '' 'this''' e' '' that''' nel sovrascritto '' 'compareTo''' così elementi sono inseriti in ordine inverso. – opyate

risposta

35

Perché pensi che questo approccio non sarà ottimizzato? L'ordine inverso Comparator sta semplicemente capovolgendo il segno dell'uscita dall'effettivo Comparator (o l'output da compareTo sugli oggetti Comparable inseriti) e quindi immagino che sia molto veloce.

Un suggerimento alternativo: Invece di modificare l'ordine in cui si memorizzano gli elementi, è possibile scorrere su di essi in ordine decrescente utilizzando il metodo descendingIterator().

+1

Grazie. il metodo descendingIterator() è stato introdotto in 6.0 e non era presente in 5.0 –

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

è necessario capovolgere il risultato. Ma immagino che questo sia solo una micro-ottimizzazione ... Ne hai davvero bisogno?

+0

No, non sarà richiesto. –

9

Se si utilizza Java 6, c'è un metodo chiamato descendingSet().

descendingSet

pubblico NavigableSet descendingSet()

Il set discendente è sostenuta da questo insieme, in modo da modificare il set è riflesso nel set discendente e viceversa. Se uno dei due set è modificato mentre un'iterazione su uno dei due set è in corso (eccetto tramite l'operazione di rimozione dell'iteratore ), i risultati dell'iterazione sono non definiti .

The returned set has an ordering equivalent to 

Collections.reverseOrder (comparatore()). L'espressione s.descendingSet(). DescendingSet() restituisce una vista di s essenzialmente equivalente a s.

Specified by: 
     descendingSet in interface NavigableSet<E> 

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