En general, hay cinco formas de iterar sobre un mapa en Java. En este artículo, discutiremos todos ellos y también veremos sus ventajas y desventajas.
En primer lugar, no podemos iterar un Mapa directamente usando iteradores , porque el Mapa no es una Colección. Además, antes de continuar, debe saber un poco sobre la interfaz Map.Entry<K, V> .
Dado que todos los mapas en Java implementan la interfaz Map , las siguientes técnicas funcionarán para cualquier implementación de mapa ( HashMap , TreeMap , LinkedHashMap , Hashtable , etc.)
1. Iterando sobre Map.entrySet() usando el bucle For-Each: el método
Map.entrySet() devuelve una vista de colección ( Set<Map.Entry<K, V>> ) de las asignaciones contenidas en este mapa. Entonces podemos iterar sobre el par clave-valor usando los métodos getKey() y getValue() de Map.Entry<K, V> . Este método es el más común y debe usarse si necesita claves de mapa y valores en el ciclo. A continuación se muestra el programa Java para demostrarlo.
Java
// Java program to demonstrate iteration over // Map.entrySet() entries using for-each loop import java.util.Map; import java.util.HashMap; class IterationDemo { public static void main(String[] arg) { Map<String,String> gfg = new HashMap<String,String>(); // enter name/url pair gfg.put("GFG", "geeksforgeeks.org"); gfg.put("Practice", "practice.geeksforgeeks.org"); gfg.put("Code", "code.geeksforgeeks.org"); gfg.put("Quiz", "quiz.geeksforgeeks.org"); // using for-each loop for iteration over Map.entrySet() for (Map.Entry<String,String> entry : gfg.entrySet()) System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } }
Producción:
Key = Quiz, Value = quiz.geeksforgeeks.org Key = Practice, Value = practice.geeksforgeeks.org Key = GFG, Value = geeksforgeeks.org Key = Code, Value = code.geeksforgeeks.org
2. Iterar sobre claves o valores utilizando los métodos keySet() y values() El método
Map.keySet() devuelve una vista de conjunto de las claves contenidas en este mapa y el método Map.values() devuelve una vista de colección de los valores contenidos en este mapa. Entonces, si solo necesita claves o valores del mapa, puede iterar sobre keySet o valores usando bucles for-each. A continuación se muestra el programa Java para demostrarlo.
Java
// Java program to demonstrate iteration over // Map using keySet() and values() methods import java.util.Map; import java.util.HashMap; class IterationDemo { public static void main(String[] arg) { Map<String,String> gfg = new HashMap<String,String>(); // enter name/url pair gfg.put("GFG", "geeksforgeeks.org"); gfg.put("Practice", "practice.geeksforgeeks.org"); gfg.put("Code", "code.geeksforgeeks.org"); gfg.put("Quiz", "quiz.geeksforgeeks.org"); // using keySet() for iteration over keys for (String name : gfg.keySet()) System.out.println("key: " + name); // using values() for iteration over values for (String url : gfg.values()) System.out.println("value: " + url); } }
Producción:
key: Quiz key: Practice key: GFG key: Code value: quiz.geeksforgeeks.org value: practice.geeksforgeeks.org value: geeksforgeeks.org value: code.geeksforgeeks.org
3. Iterar usando iteradores sobre Map.Entry<K, V>
Este método es algo similar al primero. En el primer método usamos bucle for-each sobre Map.Entry<K, V>, pero aquí usamos iteradores . El uso de iteradores sobre Map.Entry<K, V> tiene su propia ventaja, es decir, podemos eliminar entradas del mapa durante la iteración llamando al método iterator.remove() .
Java
// Java program to demonstrate iteration over // Map using keySet() and values() methods import java.util.Map; import java.util.HashMap; import java.util.Iterator; class IterationDemo { public static void main(String[] arg) { Map<String,String> gfg = new HashMap<String,String>(); // enter name/url pair gfg.put("GFG", "geeksforgeeks.org"); gfg.put("Practice", "practice.geeksforgeeks.org"); gfg.put("Code", "code.geeksforgeeks.org"); gfg.put("Quiz", "quiz.geeksforgeeks.org"); // using iterators Iterator<Map.Entry<String, String>> itr = gfg.entrySet().iterator(); while(itr.hasNext()) { Map.Entry<String, String> entry = itr.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } } }
Producción:
Key = Quiz, Value = quiz.geeksforgeeks.org Key = Practice, Value = practice.geeksforgeeks.org Key = GFG, Value = geeksforgeeks.org Key = Code, Value = code.geeksforgeeks.org
4. Usar el método forEach(action):
en Java 8, puede iterar un mapa usando el método Map.forEach(action) y usando la expresión lambda . Esta técnica es limpia y rápida.
Java
// Java code illustrating iteration // over map using forEach(action) method import java.util.Map; import java.util.HashMap; class IterationDemo { public static void main(String[] arg) { Map<String,String> gfg = new HashMap<String,String>(); // enter name/url pair gfg.put("GFG", "geeksforgeeks.org"); gfg.put("Practice", "practice.geeksforgeeks.org"); gfg.put("Code", "code.geeksforgeeks.org"); gfg.put("Quiz", "quiz.geeksforgeeks.org"); // forEach(action) method to iterate map gfg.forEach((k,v) -> System.out.println("Key = " + k + ", Value = " + v)); } }
Producción :
Key = Quiz, Value = quiz.geeksforgeeks.org Key = Practice, Value = practice.geeksforgeeks.org Key = GFG, Value = geeksforgeeks.org Key = Code, Value = code.geeksforgeeks.org
5. Iterando sobre claves y buscando valores (ineficiente)
Aquí primero hacemos un bucle sobre las claves (usando el método Map.keySet() ) y luego buscamos el valor (usando el método Map.get(key) ) para cada clave. Este método no es se usa en la práctica ya que es bastante lento e ineficiente, ya que obtener valores mediante una clave puede llevar mucho tiempo.
Java
// Java program to demonstrate iteration // over keys and searching for values import java.util.Map; import java.util.HashMap; class IterationDemo { public static void main(String[] arg) { Map<String,String> gfg = new HashMap<String,String>(); // enter name/url pair gfg.put("GFG", "geeksforgeeks.org"); gfg.put("Practice", "practice.geeksforgeeks.org"); gfg.put("Code", "code.geeksforgeeks.org"); gfg.put("Quiz", "quiz.geeksforgeeks.org"); // looping over keys for (String name : gfg.keySet()) { // search for value String url = gfg.get(name); System.out.println("Key = " + name + ", Value = " + url); } } }
Producción:
Key = Quiz, Value = quiz.geeksforgeeks.org Key = Practice, Value = practice.geeksforgeeks.org Key = GFG, Value = geeksforgeeks.org Key = Code, Value = code.geeksforgeeks.org
Referencias: Stackoverflow
Este artículo es una contribución de Gaurav Miglani y Abhishek Verma . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA