📜  如何在Java中迭代任何 Map

📅  最后修改于: 2022-05-13 01:54:47.400000             🧑  作者: Mango

如何在Java中迭代任何 Map

在Java中,通常有五种迭代 Map 的方法。在本文中,我们将讨论所有这些,并看看它们的优缺点。
首先,我们不能直接使用迭代器来迭代 Map,因为 Map 不是 Collection。另外,在继续之前,您必须对 Map.Entry 接口有所了解。
由于Java中的所有地图都实现了 Map 接口,因此以下技术适用于任何地图实现(HashMap、TreeMap、LinkedHashMap、Hashtable 等)

1. 使用 For-Each 循环遍历 Map.entrySet() :
Map.entrySet()方法返回此映射中包含的映射的集合视图( Set> )。所以我们可以使用 Map.EntrygetKey()getValue()方法迭代键值对。此方法最常见,如果您在循环中需要映射键和值,则应使用此方法。下面是演示它的Java程序。

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 gfg = new HashMap();
     
        // 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 entry : gfg.entrySet())
            System.out.println("Key = " + entry.getKey() +
                             ", Value = " + entry.getValue());
    }
}


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 gfg = new HashMap();
     
        // 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);
    }
}


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 gfg = new HashMap();
     
        // 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> itr = gfg.entrySet().iterator();
         
        while(itr.hasNext())
        {
             Map.Entry entry = itr.next();
             System.out.println("Key = " + entry.getKey() +
                                 ", Value = " + entry.getValue());
        }
    }
}


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 gfg = new HashMap();
     
        // 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));
         
    }
}


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 gfg = new HashMap();
     
        // 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);
        }
    }
}


输出:

Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org

2. 使用 keySet() 和 values() 方法迭代键或值
Map.keySet()方法返回此映射中包含的键的 Set 视图,而Map.values()方法返回此映射中包含的值的集合视图。因此,如果您只需要地图中的键或值,则可以使用 for-each 循环遍历 keySet 或值。下面是演示它的Java程序。

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 gfg = new HashMap();
     
        // 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);
    }
}

输出:

key: Quiz
key: Practice
key: GFG
key: Code
value: quiz.geeksforgeeks.org
value: practice.geeksforgeeks.org
value: geeksforgeeks.org
value: code.geeksforgeeks.org

3. 在Map.Entry上使用迭代器进行迭代
这种方法与第一种方法有些相似。在第一种方法中,我们在 Map.Entry 上使用 for-each 循环,但这里我们使用迭代器。在 Map.Entry 上使用迭代器有它自己的优势,即我们可以在迭代期间通过调用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 gfg = new HashMap();
     
        // 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> itr = gfg.entrySet().iterator();
         
        while(itr.hasNext())
        {
             Map.Entry entry = itr.next();
             System.out.println("Key = " + entry.getKey() +
                                 ", Value = " + entry.getValue());
        }
    }
}

输出:

Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org

4. 使用 forEach(action) 方法:
在Java 8 中,您可以使用Map.forEach(action)方法和 lambda 表达式来迭代地图。这种技术既干净又快速。

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 gfg = new HashMap();
     
        // 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));
         
    }
}

输出 :

Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org

5. 遍历键和搜索值(低效)
这里首先我们遍历键(使用Map.keySet()方法),然后为每个键搜索值(使用Map.get(key)方法)。该方法在实践中不使用,因为它非常慢且效率低下一个键的值可能很耗时。

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 gfg = new HashMap();
     
        // 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);
        }
    }
}

输出:

Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org