Obtenir une Énumération (pour les Clés) d'une Carte (HashMap) en Java?
Autant je comprends cela, il semble qu'il n'y a pas un moyen direct d'obtenir un Enumeration
directement par les Touches d'un HashMap
. Je ne peux obtenir un keySet()
. À partir de ce Set
, je peux obtenir un Iterator
mais un Iterator
semble être quelque chose de différent qu'un Enumeration
.
Ce qui est le meilleur et le plus performant de façon à obtenir directement un Enumeration
à partir des Touches d'un HashMap
?
Contexte: je mets en place mon propre ResourceBundle (=>getKeys()
Méthode), et je dois fournir/mettre en œuvre une méthode qui retourne l'Énumération de toutes les Clés. Mais ma mise en œuvre est basée sur un HashMap
donc j'ai besoin de quelque sorte de trouver la meilleure façon de convertir entre ces deux "Itérateur/Énumérateur de" techniques.
- Est-il une raison pourquoi vous avez besoin d'Énumérations au lieu de les Itérateurs? L'énumération de la Javadoc vous recommande d'utiliser l'Itérateur à la place.
- ainsi, la Classe, je me suis mise en œuvre nécessite une Énumération: java.sun.com/javase/6/docs/api/java/util/... (voir le getKey() Méthode d') La seule chose que je puisse faire est de mettre en œuvre complètement différent et de ne pas utiliser la table de hachage à tous. Néanmoins, je serais très intéressé par l'apprentissage de ce qui est le meilleur et le plus puissant moyen d'obtenir une Énumération pour les Clés d'une Carte. merci!
Vous devez vous connecter pour publier un commentaire.
Apache commons-collections un adaptateur qui rend le
Iterator
disponible pour une utilisation comme unEnumeration
. Jetez un oeil à IteratorEnumeration.Donc, en bref vous faites ce qui suit:
Alternativement, si vous (pour certaines raisons) ne voulez pas inclure commons-collections, vous pouvez mettre en œuvre cet adaptateur vous-même. Il est facile - il suffit de faire une mise en œuvre de
Enumeration
, passer leIterator
dans un constructeur, et à chaque fois quehasMoreElements()
etnextElement()
sont appelés, vous appelez lahasNext()
etnext()
sur le sous-jacentIterator
.Utilisez cette option que si vous êtes obligé d'utiliser
Enumeration
par certaines API contrat (que je suppose que le cas est). Sinon utiliserIterator
- c'est l'option recommandée.Iterators.asEnumerator()
: google-collections.googlecode.com/svn/trunk/javadoc/com/google/...Je pense que vous pouvez utiliser la méthode énumération de java.util.Collections de la classe pour réaliser ce que vous voulez.
La doc API de la méthode d'énumérer a ceci à dire:
public static Énumération énumération(Collection c)
Retourne une énumération plus de la collection spécifiée. Cela fournit l'interopérabilité avec les Api qui nécessitent une énumération à l'entrée.
Par exemple, le code ci-dessous extrait obtient une instance de l'Énumération de le jeu de clés de HashMap
et résultant de la sortie est:
on
deux
trois
Vous pouvez écrire une carte pour s'adapter à l'Énumération.
Et puis vous pouvez utiliser cette énumération personnalisée 🙂