Cómo recorrer el mapa en Java
Cómo iterar sobre un objeto Map en Java
Cómo iterar sobre un mapa en Java
Hay muchas formas de recorrer un mapa en Java. Echemos un vistazo a los métodos más comunes y sus pros y contras.
Dado que todos los mapas en Java implementan la interfaz Map, los siguientes métodos son aplicables a cualquier implementación de mapa (HashMap, TreeMap, LinkedHashMap, Hashtable, etc.)
El método 1 está disponible para - Usar entradas en cada bucle para recorrer
Esta es la forma más común y, en la mayoría de los casos, la más deseable de recorrer. Se utiliza cuando se requieren tanto la clave como el valor.
[java] ver copia simple
Map
for (Map.Entry)
System.out.println("Clave = " + entrada.getKey() + ", Valor = " + entrada.getValue()) ;
}
Nota: El bucle for-each se introdujo en Java 5, por lo que este método solo se puede aplicar a Java 5 o superior. Si itera sobre un objeto de mapa vacío, el bucle for-each generará una NullPointerException, por lo que siempre debe verificar si hay referencias nulas antes de iterar.
Método 2: Recorrer claves o valores en un bucle for-each.
Si solo necesita las claves o valores en el mapa, puede atravesar keySet o valores en lugar de EntrySet.
[java] ver copia simple
Map
//Recorre el mapa clave
for (Clave entera: map.keySet()) {
System.out.println("Clave = " + clave); /p>
//Recorre los valores en el mapa
for (Valor entero: map.values()) {
System.out.println("Valor = " + valor);
}
Este método tiene un rendimiento ligeramente mejor que el recorrido de EntrySet (10% más rápido) y el código es más limpio.
El método 3 utiliza el recorrido del iterador
Usa genéricos:
[java] ver copia simple
Map
Iterator
Map.Entry
System.out.println("Clave = " + entrada. getKey () + ", Valor = " + entrada.getValue());
}
No utilice genéricos:
[java] ver copia simple
Mapa mapa = new HashMap();
Entradas del iterador = map.entrySet().iterator()
mientras (entries.hasNext()) {
Map.Entry entrada = (Map.Entry) entradas.next();
Clave entera = (Integer)entry.getKey(); valor = (Entero)entry.getValue();
System.out.println("Clave = " + clave + ", Valor = " + valor
}
p>
También puedes aplicar el mismo método a conjuntos de claves y valores.
Este enfoque parece redundante pero tiene sus ventajas. En primer lugar, en versiones anteriores de Java esta era la única forma de recorrer el mapa. Otro beneficio es que puede llamar a iterator.remove() para eliminar entradas mientras recorre, algo que los otros dos métodos no pueden hacer. Según el javadoc, si intenta utilizar este método en un recorrido para cada uno, los resultados son impredecibles.
Desde una perspectiva de rendimiento, este método es similar al rendimiento del recorrido para cada uno (es decir, el método 2).
Método 4. Encontrar recorrido de valor por clave (baja eficiencia)
[java] ver copia simple
Map
for (Clave entera: map.keySet()) {
Valor entero = map.get(clave); System.out.println("Key = " + key + ", Value = " + value);
}
Como alternativa al método 1, este código parece más limpio; en realidad es bastante lento e ineficiente. Porque obtener el valor de la clave es una operación que requiere mucho tiempo (en comparación con el método 1, este método es entre un 20% y un 200% más lento en diferentes implementaciones de mapas).
Si tiene FindBugs instalado, lo comprobará y le advertirá sobre recorridos ineficientes. Así que trata de evitar su uso.