metodos example elementos declarar cargar agregar adicionar java iteration hashmap

example - map string string java



Java HashMap: ¿Cómo obtener una clave y un valor por índice? (8)

Aquí está la solución general si realmente solo desea el valor de la primera clave

Object firstKey = myHashMap.keySet().toArray()[0]; Object valueForFirstKey = myHashMap.get(firstKey);

Estoy tratando de usar un HashMap para asignar una cadena única a una cadena ArrayList como esta:

HashMap<String, ArrayList<String>>

Básicamente, quiero poder acceder a las claves por número, no usando el nombre de la clave. Y quiero poder acceder al valor de dicha clave, para iterar sobre ella. Estoy imaginando algo como esto:

for(all keys in my hashmap) { for(int i=0; i < myhashmap.currentKey.getValue.size(); i++) { // do things with the hashmaps elements } }

¿Hay una forma fácil de hacer esto?


HashMaps no mantiene sus pares clave / valor en un orden específico. Se ordenan según el hash que devuelve cada clave de su método Object.hashCode (). Sin embargo, puede iterar sobre el conjunto de pares clave / valor utilizando un iterador con:

for (String key : hashmap.keySet()) { for (list : hashmap.get(key)) { //list.toString() } }


Los HashMaps no se ordenan, a menos que use un LinkedHashMap o SortedMap . En este caso, es posible que desee un LinkedHashMap . Esto se repetirá en orden de inserción (o en orden de último acceso, si lo prefiere). En este caso, sería

int index = 0; for ( Map.Entry<String,ArrayList<String>> e : myHashMap.iterator().entrySet() ) { String key = e.getKey(); ArrayList<String> val = e.getValue(); index++; }

No hay obtención directa (índice) en un mapa porque es una lista desordenada de pares clave / valor. LinkedHashMap es un caso especial que mantiene el orden.


Puede iterar sobre las teclas llamando a map.keySet() , o iterar sobre las entradas llamando a map.entrySet() . Iterar sobre las entradas probablemente será más rápido.

for (Map.Entry<String, List<String>> entry : map.entrySet()) { List<String> list = entry.getValue(); // Do things with the list }

Si quieres asegurarte de iterar sobre las claves en el mismo orden en que las insertaste, utiliza un LinkedHashMap .

Por cierto, recomiendo cambiar el tipo declarado del mapa a <String, List<String>> . Siempre es mejor declarar tipos en términos de la interfaz en lugar de la implementación.


Si no te importa la clave real, una forma concisa de iterar sobre todos los valores del Mapa sería usar su método de values()

Map<String, List<String>> myMap; for ( List<String> stringList : myMap.values() ) { for ( String myString : stringList ) { // process the string here } }

El método de values() es parte de la interfaz del Mapa y devuelve una vista de Colección de los valores en el mapa.


Tu puedes hacer:

for(String key: hashMap.keySet()){ for(String value: hashMap.get(key)) { // use the value here } }

Esto iterará sobre cada clave, y luego cada valor de la lista asociada con cada clave.


Ya se ha seleccionado una solución. Sin embargo, publico esta solución para aquellos que desean utilizar un enfoque alternativo:

// use LinkedHashMap if you want to read values from the hashmap in the same order as you put them into it private ArrayList<String> getMapValueAt(LinkedHashMap<String, ArrayList<String>> hashMap, int index) { Map.Entry<String, ArrayList<String>> entry = (Map.Entry<String, ArrayList<String>>) hashMap.entrySet().toArray()[index]; return entry.getValue(); }


for (Object key : data.keySet()) { String lKey = (String) key; List<String> list = data.get(key); }