2009-07-07 20 views
22

Aquí descendente es la pieza de código que he utilizado para Java 5,0TreeSet para ordenar elementos con el fin

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

Collections.reverseOrder() se utiliza para obtener un comparador con el fin de revertir la forma en que el los elementos se almacenan e iteran

¿Hay una manera más optimizada de hacerlo?

+2

voltear la orden de '' 'this''' y' '' that''' en el anulado '' 'compareTo''' así que los artículos se insertan en el orden opuesto. – opyate

Respuesta

35

¿Por qué crees que este enfoque no se optimizará? El orden inverso Comparator simplemente va a estar volteando el signo de la salida del Comparator real (o la salida de compareTo en los objetos Comparable que se insertan) y me imagino que es muy rápido.

Sugerencia alternativa: en lugar de cambiar el orden en el que almacena los elementos, puede iterar sobre ellos en orden descendente utilizando el método descendingIterator().

+1

Gracias. El método descendingIterator() se introdujo en 6.0 y no estaba en 5.0 –

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

hay necesidad de voltear el resultado. Pero supongo que esto es solo una micro-optimización ... ¿Realmente necesitas esto?

+0

No, eso no será necesario. –

9

Si está utilizando Java 6, hay un método llamado descendingSet().

descendingSet

pública NavigableSet descendingSet()

El conjunto descendente está respaldado por este conjunto , por lo que los cambios en el conjunto es reflejado en el conjunto descendente, y viceversa. Si cualquiera de los conjuntos se modifica mientras está en curso una iteración sobre cualquiera de los conjuntos (excepto a través de la operación de eliminación del propio iterador ), los resultados de la iteración son indefinidos .

The returned set has an ordering equivalent to 

Collections.reverseOrder (comparator()). La expresión s.descendingSet(). DescendingSet() devuelve una vista de s esencialmente equivalente a s.

Specified by: 
     descendingSet in interface NavigableSet<E> 

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