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?
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()
.
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
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?
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);
}
}
}