Treeset pour commander les éléments dans l'ordre décroissant

Voici le morceau de code que j'ai utilisé pour Java 5.0

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

Les Collections.reverseOrder () {[5] } est utilisé pour obtenir un comparateur afin d'inverser la façon dont les éléments sont stockés et itérés.

Y a-t-il une façon plus optimisée de le faire?

25
demandé sur Gaurav Saini 2009-07-07 12:10:59

3 réponses

Pourquoi pensez-vous que cette approche ne sera pas optimisé? L'ordre inverse Comparator va simplement retourner le signe de la sortie du Comparator réel (ou de la sortie de compareTo sur les objets Comparable en cours d'insertion) et j'imagine donc que c'est très rapide.

Une suggestion alternative: plutôt que de changer l'ordre dans lequel vous stockez les éléments, vous pouvez les parcourir par ordre décroissant en utilisant la méthode descendingIterator().

38
répondu Adamski 2009-07-07 08:14:01

Si vous utilisez Java 6, Il existe une méthode appelée descendingSet ().

Ensemble Descendant

Public NavigableSet descendingSet ()

L'ensemble descendant est soutenu par ceci ensemble, les modifications apportées à l'ensemble sont reflète dans la descente ensemble, et inversement. Si l'un des ensembles est modifié pendant une itération sur l'ensemble est en cours (sauf par le biais de la itérateur propre opération de suppression), la les résultats de l'itération sont indéterminé.

    The returned set has an ordering equivalent to

Collections.reverseOrder(comparateur()). Expression s.descendingSet().descendingSet() renvoie une vue de s essentiellement équivalent à l'art.

    Specified by:
        descendingSet in interface NavigableSet<E>

    Returns:
        a reverse order view of this set
    Since:
        1.6
9
répondu Brian 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);
        }
  });

Il est nécessaire de retourner le résultat. Mais je suppose que c'est juste une micro-optimisation... Avez-vous vraiment besoin de cela ?

5
répondu Pierre 2009-07-07 08:16:58