Con respecto a las cuatro formas específicas de recorrer un mapa en Java, consulte la explicación detallada a continuación.
Método 1 Esta es la forma más común y en la mayoría de los casos la más deseable de atravesar. Se utiliza cuando se requieren tanto la clave como el valor.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entrada: map.entrySet()) { System.out.println("Clave = " + entrada. getKey() + ", Valor = " + entrada.getValue());
El método 2 atraviesa claves o valores en un bucle para cada uno.
Si solo necesita las claves o valores en el mapa, puede atravesar keySet o valores en lugar de usar EntrySet.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); // Recorre las claves en el mapa for (Integer key: map.keySet()) { System.out.println("Key = " + key ) ; } // Recorre los valores en el mapa para (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 tres usa Iterator para atravesar
Utilice genéricos :
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entradas = map.entrySet().iterator(); Map.Entry<Entero, Entero> entrada = entradas.next(); System.out.println("Clave = " + entrada.getKey() + ", Valor = " + entrada.getValue() }
Sin usar genéricos:
Mapa mapa = new HashMap(); Entradas del iterador = map.entrySet().iterator(); while (entries.hasNext()) { Entrada Map.Entry = (Map.Entry) entradas.next(); Entero)entry.getKey(); Valor entero = (Integer)entry.getValue(); System.out.println("Clave = " + clave + ", Valor = " + valor); }
También puede aplicar el mismo enfoque a conjuntos de claves y valores.
Este enfoque parece redundante pero tiene sus ventajas. En primer lugar, esta es la única forma de recorrer un mapa en versiones anteriores de Java. 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: recorrer buscando valores por clave (baja eficiencia)
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Clave entera: map.keySet()) { Valor entero = map.get(clave); + tecla + ", Valor = " + valor);
Como alternativa al método uno, este código parece más limpio pero 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.
Resumir
Si solo necesita claves o valores, utilice el método dos. Si la versión del idioma que está utilizando es inferior a Java 5, o planea eliminar entradas durante el recorrido, debe utilizar el método tres. De lo contrario, utilice el método uno (tanto clave como valor).