Pourquoi ne HashSet mise en œuvre dans Sun Java utiliser HashMap que sa sauvegarde?

En regardant la source de Java 6, HashSet<E> est réellement mis en œuvre à l'aide de HashMap<E,Object>, à l'aide de mannequin instance d'objet sur chaque entrée de l'Ensemble.

Je pense que les déchets 4 octets (sur les machines 32 bits) pour la taille de l'entrée elle-même.

Mais, pourquoi est-il encore utilisé? Est-il une raison pour l'utiliser en plus de rendre plus facile à maintenir les codes?

  • le niveau de déchets en Java par défaut des collections est aberrant. Le pire des délinquants qui se passe quand vous manipulez des primitives. Vous pensez qu'un HashSet<Object> qui est mauvais? Pas de penser à ce sujet: HashMap<Integer,Integer>. Si vous êtes après, efficace collections que vous voulez regarder Trésor (pour les primitives) ou Javolution (en temps réel). Ils tournent tous deux autour de cercles de Java par défaut collections, à la fois la performance et la mémoire sage. Nous faisons de lourds calculs et des collections avec des millions d'éléments sont communs pour nous. Mine de roches. Javolution rochers. La valeur par défaut de Java collections n'ont tout simplement pas le couper.
  • pour continuer sur mon commentaire... Ce que je veux dire, c'est: soit perfs et de la mémoire de la matière et ensuite, vous devez trouver une autre alternative, car le niveau de déchets en Java par défaut des collections est trop élevée ou que vous n'avez pas besoin de perfs et de la mémoire n'a pas d'importance, parce que vous allez être à l'aide de minuscules nombre d'éléments et la valeur par défaut de Java collections sont ok (dur il y a probablement une meilleure solution alternative comme le Google collections etc.)
  • c'est beaucoup de déclarations audacieuses avec peu de preuves pour les sauvegarder.
  • HashMap ne permet pas de doubles de clés donc à l'aide d'une table de hachage pour mettre en œuvre un ensemble est une bonne idée. Ils auraient voulu réutiliser le code existant de table de hachage.