web-dev-qa-db-fra.com

Treeset pour ordonner 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() ) ;

Collections.reverseOrder () 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 manière plus optimisée de le faire?

26
Gaurav Saini

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

Une autre suggestion: au lieu de changer l'ordre dans lequel vous stockez les éléments, vous pouvez les parcourir dans l'ordre décroissant à l'aide de la méthode descendingIterator().

39
Adamski

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

descendantSet

public NavigableSet descendingSet ()

L'ensemble décroissant est soutenu par ceci ensemble, donc les modifications apportées à l'ensemble sont reflété dans l'ensemble décroissant, et vice versa. Si l'un des ensembles est modifié alors qu'une itération sur l'un ou l'autre ensemble est en cours (sauf via l'opération de suppression propre de l'itérateur .__), le les résultats de l'itération sont indéfini.

    The returned set has an ordering equivalent to

Collections.reverseOrder (comparateur ()) . L'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
Brian
TreeSet<Integer> treeSetObj = new TreeSet<Integer>(new Comparator<Integer>()
  {
  public int compare(Integer i1,Integer i2)
        {
        return i2.compareTo(i1);
        }
  });

il est nécessaire d'inverser le résultat. Mais je suppose que c'est juste une micro-optimisation ... En avez-vous vraiment besoin?

5
Pierre
TreeSet t = new TreeSet(new MyComparator());
  {
class MyComparator implements Comparator
{
  public int compare(Integer i1,Integer i2)
        {
         Integer I1=(Integer)i1;
         Integer I2=(Integer)i2;
         return I2.compareTo(I1);  // return -I1compareTo(I2);
        }
}
  }
0
Ashutosh