Java 如何迭代任何Map

Java 如何迭代任何Map

在Java中,通常有 五种 迭代Map的方法。在这篇文章中,我们将讨论所有这些方法,并看看它们的优点和缺点。

首先,我们 不能 直接使用迭代器来迭代Map,因为Map不是集合。在进一步讨论之前,你必须先了解一下Map.Entry<K, V>接口。

因为Java中的所有Map都实现了Map接口,所以以下技术对任何Map的实现都有效(HashMap, TreeMap, LinkedHashMap, Hashtable等)。

1.使用For-Each循环遍历Map.entrySet():

Map.entrySet()方法返回该Map中包含的映射的集合视图(Set <Map.Entry<K, V>)。所以我们可以使用Map.Entry<K, V>的 getKey()和getValue() 方法对键值对进行迭代。这个方法是最常见的,如果你在循环中需要Map的键和值,就应该使用这个方法。下面是演示它的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", "www.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());
    }
}

输出

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

2.使用keySet()和values()方法对键或值进行迭代

Map.keySet()方法返回该Map中包含的键的Set视图, Map.values() 方法返回该Map中包含的值的集合视图。因此,如果你只需要Map中的键或值,你可以使用for-each循环来迭代keySet或value。下面是一个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", "www.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: www.geeksforgeeks.org
value: practice.geeksforgeeks.org
value: geeksforgeeks.org
value: code.geeksforgeeks.org

3.使用迭代器在 Map.Entry <K, V> 上进行迭

这个方法和第一个方法有点类似。在第一种方法中,我们在Map.Entry<K, V>上使用for-each循环,但这里我们使用迭代器。在Map.Entry<K, V>上使用迭代器有它自己的优势,即我们可以在迭代过程中通过调用iterator.remove()方法从Map中删除条目。

// 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", "www.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());
        }
    }
}

输出

Key = Quiz, Value = www.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表达式来迭代一个Map。这种技术既干净又快速。

// 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", "www.geeksforgeeks.org");
          
        // forEach(action) method to iterate map
        gfg.forEach((k,v) -> System.out.println("Key = "
                + k + ", Value = " + v));
          
    }
}

输出:

Key = Quiz, Value = www.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 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", "www.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 = www.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程