En fait, ce n'est pas seulement HashSet
. Toutes les implémentations de l' Set
interface en Java 6 sont basés sur un sous-jacent Collection
. Ce n'est pas une obligation, c'est juste la manière dont l'application est. Vous pouvez voir par vous-même en consultant la documentation pour les diverses implémentations d' Set
.
Vos principales questions sont
Mais, pourquoi est-il encore utilisé? Est-il
aucune raison pour l'utiliser en plus de rendre
plus facile à maintenir les codes?
Je suppose que le code de la maintenance est un grand facteur de motivation. Donc est d'empêcher la duplication et le ballonnement.
Set
et Map
sont semblables interfaces, en ce que les éléments en double ne sont pas autorisés. (Je pense que la seule Set
pas soutenu par un Map
est CopyOnWriteArraySet
, ce qui est une étonnante Collection, parce qu'il est immuable.)
Plus précisément:
À partir de la documentation de l' Set
:
Une collection qui ne contient pas de
les éléments en double. Plus formellement,
les ensembles contiennent pas de paire d'éléments e1
et e2 tels que e1.equals(e2), et à
plus un élément de valeur null. Comme le sous-entend
son nom, cette interface les modèles de la
ensemble mathématique de l'abstraction.
L'interface de places supplémentaires
stipulations, au-delà de celles héritées
à partir de l'interface de Collecte, sur le
les contrats de tous les constructeurs et sur
les contrats de l'ajouter, d'égal à égal et
les méthodes hashCode. Déclarations pour
d'autres les méthodes héritées sont également
inclus ici pour plus de commodité. (Le
spécifications de l'accompagnement de ces
des déclarations ont été adaptées à la
L'interface, mais ils ne contiennent pas de
toutes les stipulations supplémentaires.)
La disposition additionnelle sur
les constructeurs est, il n'est pas surprenant,
que tous les constructeurs doivent créer un
ensemble qui ne contient pas de doublons
éléments (tel que défini ci-dessus).
Et à partir de Map
:
Un objet que les cartes des clés à des valeurs.
Une carte ne peut pas contenir des doubles de clés; chaque clé peut correspondre à au plus une valeur.
Si vous pouvez mettre en œuvre votre Set
s à l'aide du code existant, tout avantage (vitesse, par exemple), vous pouvez réaliser à partir d'un code existant revient à votre Set
ainsi.
Si vous choisissez de mettre en œuvre un Set
sans Map
sauvegarde, vous devez dupliquer du code conçu pour empêcher les éléments en double. Ah, la délicieuse ironie.
Cela dit, rien ne vous empêche de mise en œuvre de votre Set
s différemment.