191 votes

Comment obtenir l’une entrée de hashmap sans itérer

Est-il un moyen élégant de l'obtention d'un seul Entry<K,V> de table de hachage, sans itération, si la clé n'est pas connue.

Comme l'ordre d'entrée d'entrée n'est pas important, peut-on dire quelque chose comme

hashMapObject.get(zeroth_index);

Même si je suis consciente qu'il n'existe pas de telles obtenir par la méthode de l'indice.

Si j'ai essayé de l'approche mentionnée ci-dessous, il aurait encore à obtenir toutes les entrée de la valeur de la table de hachage.

for(Map.Entry<String, String> entry : MapObj.entrySet()) {
    return entry;
}

Les Suggestions sont les bienvenues.

EDIT: Veuillez indiquer toute autre Structure de Données suffire exigence.

270voto

Jesper Points 65733

Les cartes ne sont pas commandé, donc il n'y a pas une telle chose comme la "première entrée", et c'est aussi pourquoi il n'est pas d'obtenir par-méthode de l'indice sur Map (ou HashMap).

Vous pouvez faire ceci:

Map<String, String> map = ...;  // wherever you get this from

// Get the first entry that the iterator returns
Map.Entry<String, String> entry = map.entrySet().iterator().next();

(Remarque: la Vérification d'une carte vide omis).

Votre code ne nécessite pas d'obtenir toutes les entrées de la carte, il revient tout de suite (et les pauses de la boucle) avec la première entrée trouvée.

Remarque: l'Appel d' iterator() ne signifie pas que vous êtes une itération sur l'ensemble de la carte.

100voto

Per Östlund Points 416

La réponse par Jesper est bonne. Une autre solution consiste à utiliser la TreeMap (vous demandé pour d’autres structures de données).

TreeMap a un rétroprojecteur HashMap est donc plus rapide, mais à titre d’exemple d’une solution de rechange.

32voto

cadrian Points 4102

Je suppose que l’itérateur peut être la solution la plus simple.

Une autre solution (pas assez) :

Ou encore (pas mieux) :

16voto

Wiktor Misiek Points 41

Obtenir des valeurs, la convertir en un tableau, obtenir le premier élément du tableau :

W.

6voto

Adriaan Koster Points 6264

Si vous voulez vraiment l’API que vous l’avez suggéré, vous pourriez la sous-classe HashMap et garder une trace des clés dans une liste par exemple. Ne vois pas vraiment le point à cela, mais il vous donne ce que vous voulez. Si vous expliquez le cas de l’utilisation prévue, peut-être nous pouvons arriver avec une meilleure solution.

EDIT : J’ai délibérément ne pas plonger dans le côté de génériques de cette...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X