Cómo iterar cualquier mapa en Java

 

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

Java-Foundation-Course

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *