108 votes

Est-il possible d'obtenir un élément à partir de HashMap par sa position ?

Comment récupérer un élément de HashMap par sa position, est-ce possible ?

117voto

Kulnor Points 216

Utilisez un LinkedHashMap et lorsque vous avez besoin de récupérer par position, convertissez les valeurs en une ArrayList.

LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<String,String>();
/* Populate */
linkedHashMap.put("key0","value0");
linkedHashMap.put("key1","value1");
linkedHashMap.put("key2","value2");
/* Get by position */
int pos = 1;
String value = (new ArrayList<String>(linkedHashMap.values())).get(pos);

57voto

Syd Lambert Points 1127

Si vous souhaitez maintenir l'ordre dans lequel vous avez ajouté les éléments à la carte, utilisez LinkedHashMap au lieu de HashMap.

Voici une approche qui vous permettra d'obtenir une valeur par son indice dans la carte :

public Object getElementByIndex(LinkedHashMap map,int index){
    return map.get( (map.keySet().toArray())[ index ] );
}

22voto

theNoble247 Points 288

Si, pour une raison quelconque, vous devez vous en tenir au hashMap, vous pouvez convertir le keySet en tableau et indexer les clés dans le tableau pour obtenir les valeurs dans la carte comme suit :

Object[] keys = map.keySet().toArray();

Vous pouvez alors accéder à la carte comme :

map.get(keys[i]);

12voto

ilalex Points 1319

Utilisez LinkedHashMap :

Mise en œuvre de la table de hachage et de la liste liée de l'interface Map, avec un ordre d'itération prévisible. Cette implémentation diffère de HashMap en ce sens qu'elle maintient une liste doublement liée parcourant toutes ses entrées.

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