• 五种方法来遍历Map


    如何在Java中迭代任何Map

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

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

    Map.entrySet()方法返回此Map中包含的映射的collection-view(Set <Map.Entry <K,V >>)。因此,我们可以使用Map.Entry <K,V>的getKey()和getValue()方法遍历键值对。此方法是最常见的方法,如果在循环中同时需要映射键和值,则应使用此方法。下面是演示它的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()); 
        } 
    } 
    结果:
    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 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 keys 
            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 <K,V>上使用迭代器进行迭代

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

    // 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()); 
            } 
        } 
    } 
    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表达式来迭代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", "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 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); 
            } 
        } 
    } 
    Key = Quiz, Value = quiz.geeksforgeeks.org
    Key = Practice, Value = practice.geeksforgeeks.org
    Key = GFG, Value = geeksforgeeks.org
    Key = Code, Value = code.geeksforgeeks.org
    

      总结:

    • jdk7及以下通过迭代器迭代Map.Entry<K,V>来遍历(或者删除map中的键值对)
    • jdk8及以上通过Map.forEach(lambda 表达式遍历)
  • 相关阅读:
    SharePoint Workflow出了问题, 除了ULS log还可以看什么日志?
    Kernel Mode Debugging 初步 一
    一些debug常用的"魔法"数值
    SQL Block的初级排查
    [持续更新]一些有用的PowerShell收集
    关于斜杠(slash)和反斜杠(back slash)的小知识点
    如何安全地解放C盘剩余磁盘空间?
    返璞归真asp.net mvc 1.0(3) Controller/Action【转】
    关于Oxite的教训
    [翻译ASP.NET MVC]Contact Manager开发之旅之迭代2 修改样式,美化应用 【转】
  • 原文地址:https://www.cnblogs.com/crelle/p/13330478.html
Copyright © 2020-2023  润新知