Treeset para ordenar elementos en orden descendente


Aquí está el fragmento de código que he utilizado para Java 5.0

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

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

¿Hay una forma más optimizada de hacerlo?

Author: Gaurav Saini, 2009-07-07

3 answers

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

Una sugerencia alternativa: En lugar de cambiar el orden en el que almacena los elementos, podría iterar sobre ellos en orden descendente utilizando el método descendingIterator().

 38
Author: Adamski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-07 08:14:01

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

DescendingSet

Public NavigableSet descendingSet ()

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

    The returned set has an ordering equivalent to

Colecciones.reverseOrder (comparator ()). Expresion s. descendingSet ().Conjunto descendiente() 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
 9
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-19 15:06:24
TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>()
  {
  public int compare(Integer i1,Integer i2)
        {
        return i2.compareTo(i1);
        }
  });

Es necesario voltear el resultado. Pero supongo que esto es sólo un micro-optimización... ¿Realmente necesitas esto ?

 5
Author: Pierre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-07 08:16:58