D'égal à égal et Comparables avec les Jeux
J'ai posté quelques code ici qui correctement résolu un problème que l'affiche avait. L'OP voulait supprimer les doublons et d'apporter certains éléments spéciaux pour la tête de liste. J'ai utilisé un TreeSet
avec un spécial Comparable
classe qui a enveloppé le Locale
ils travaillaient pour obtenir ce qu'ils voulaient.
Puis j'ai réfléchi ... comme vous le faites ... que j'étais en éliminant les doublons en retournant 0
de la compareTo
méthode, et non par le retour true
à partir d'un equals
mise en œuvre que l'on a besoin de faire pour indiquer correctement un doublon dans une Set
(à partir de la définition d'un Set
).
Je n'ai pas d'objection à l'utilisation de cette technique, mais je suis en utilisant ce qui pourrait être considéré comme un fonctionnalité non documentée? Suis-je sûr de supposer que de faire ce genre de chose à l'avenir continuera à travailler?
OriginalL'auteur OldCurmudgeon | 2012-10-06
Vous devez vous connecter pour publier un commentaire.
Il semble que c'est assez bien documentée dans JavaDoc de
TreeSet
(en gras le mien):Voici un exemple de la seulement (?) JDK classe qui implémente
Comparable
mais n'est pas compatible avecequals()
:decimals
à la fin de trois valeurs, car42
,42.0
et42.00
ne sont pas égaux autant queequals()
. Mais si vous remplacezHashSet
avecTreeSet
, le jeu ne contient que des 1 point (42
- qui est arrivé à être le premier ajoutée) que tous d'entre eux sont considérés comme identiques lorsque comparées à l'aide deBigDecimal.compareTo()
.Cela montre que
TreeSet
est en quelque sorte un "cassé" lors de l'utilisation de types pas compatible avecequals()
. Il fonctionne toujours correctement et toutes les opérations sont bien définis, il a juste ne respecte pas le contrat deSet
classe - si deux classes ne sont pasequal()
, ils ne sont pas considérés comme des doublons.Voir aussi
ConcurrentSkipListSet
docs.Effectivement, il est également indiqué dans le javadoc de SortedSet (et les deux TreeSet et ConcurrentSkipListSet à implémenter cette interface).
Il le fait!! Bonne prise.
OriginalL'auteur Tomasz Nurkiewicz