Comment récupérer un élément de HashMap par sa position, est-ce possible ?
Réponses
Trop de publicités?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);
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 ] );
}
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]);
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.