如何在 Java 中迭代任何 Map

原创 朱雀 2021-08-14 09:38 13747阅读 0赞

如何在 Java 中迭代任何 Map

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

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

  1. // Java program to demonstrate iteration over
  2. // Map.entrySet() entries using for-each loop
  3. import java.util.Map;
  4. import java.util.HashMap;
  5. class IterationDemo
  6. {
  7. public static void main(String[] arg)
  8. {
  9. Map<String,String> gfg = new HashMap<String,String>();
  10. // enter name/url pair
  11. gfg.put("GFG", "geeksforgeeks.org");
  12. gfg.put("Practice", "practice.geeksforgeeks.org");
  13. gfg.put("Code", "code.geeksforgeeks.org");
  14. gfg.put("Quiz", "quiz.geeksforgeeks.org");
  15. // using for-each loop for iteration over Map.entrySet()
  16. for (Map.Entry<String,String> entry : gfg.entrySet())
  17. System.out.println("Key = " + entry.getKey() +
  18. ", Value = " + entry.getValue());
  19. }
  20. }

输出:

  1. Key = Quiz, Value = quiz.geeksforgeeks.org
  2. Key = Practice, Value = practice.geeksforgeeks.org
  3. Key = GFG, Value = geeksforgeeks.org
  4. Key = Code, Value = code.geeksforgeeks.org

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

  1. // Java program to demonstrate iteration over
  2. // Map using keySet() and values() methods
  3. import java.util.Map;
  4. import java.util.HashMap;
  5. class IterationDemo
  6. {
  7. public static void main(String[] arg)
  8. {
  9. Map<String,String> gfg = new HashMap<String,String>();
  10. // enter name/url pair
  11. gfg.put("GFG", "geeksforgeeks.org");
  12. gfg.put("Practice", "practice.geeksforgeeks.org");
  13. gfg.put("Code", "code.geeksforgeeks.org");
  14. gfg.put("Quiz", "quiz.geeksforgeeks.org");
  15. // using keySet() for iteration over keys
  16. for (String name : gfg.keySet())
  17. System.out.println("key: " + name);
  18. // using values() for iteration over values
  19. for (String url : gfg.values())
  20. System.out.println("value: " + url);
  21. }
  22. }

输出:

  1. key: Quiz
  2. key: Practice
  3. key: GFG
  4. key: Code
  5. value: quiz.geeksforgeeks.org
  6. value: practice.geeksforgeeks.org
  7. value: geeksforgeeks.org
  8. value: code.geeksforgeeks.org

3. 在Map.Entry 上 使用迭代器进行迭代
这种方法与第一种方法有些相似。在第一种方法中,我们在 Map.Entry 上使用 for-each 循环,但在这里我们使用迭代器。在 Map.Entry 上使用迭代器有其自身的优势,即我们可以通过调用iterator.remove()方法在迭代期间从地图中删除条目。

  1. // Java program to demonstrate iteration over
  2. // Map using keySet() and values() methods
  3. import java.util.Map;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. class IterationDemo
  7. {
  8. public static void main(String[] arg)
  9. {
  10. Map<String,String> gfg = new HashMap<String,String>();
  11. // enter name/url pair
  12. gfg.put("GFG", "geeksforgeeks.org");
  13. gfg.put("Practice", "practice.geeksforgeeks.org");
  14. gfg.put("Code", "code.geeksforgeeks.org");
  15. gfg.put("Quiz", "quiz.geeksforgeeks.org");
  16. // using iterators
  17. Iterator<Map.Entry<String, String>> itr = gfg.entrySet().iterator();
  18. while(itr.hasNext())
  19. {
  20. Map.Entry<String, String> entry = itr.next();
  21. System.out.println("Key = " + entry.getKey() +
  22. ", Value = " + entry.getValue());
  23. }
  24. }
  25. }

输出:

  1. Key = Quiz, Value = quiz.geeksforgeeks.org
  2. Key = Practice, Value = practice.geeksforgeeks.org
  3. Key = GFG, Value = geeksforgeeks.org
  4. Key = Code, Value = code.geeksforgeeks.org

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

  1. // Java code illustrating iteration
  2. // over map using forEach(action) method
  3. import java.util.Map;
  4. import java.util.HashMap;
  5. class IterationDemo
  6. {
  7. public static void main(String[] arg)
  8. {
  9. Map<String,String> gfg = new HashMap<String,String>();
  10. // enter name/url pair
  11. gfg.put("GFG", "geeksforgeeks.org");
  12. gfg.put("Practice", "practice.geeksforgeeks.org");
  13. gfg.put("Code", "code.geeksforgeeks.org");
  14. gfg.put("Quiz", "quiz.geeksforgeeks.org");
  15. // forEach(action) method to iterate map
  16. gfg.forEach((k,v) -> System.out.println("Key = "
  17. + k + ", Value = " + v));
  18. }
  19. }

输出 :

  1. Key = Quiz, Value = quiz.geeksforgeeks.org
  2. Key = Practice, Value = practice.geeksforgeeks.org
  3. Key = GFG, Value = geeksforgeeks.org
  4. Key = Code, Value = code.geeksforgeeks.org

5. 迭代键和搜索值(低效)
这里首先我们循环键(使用Map.keySet()方法),然后为每个搜索值(使用Map.get(key)方法)。这种方法不是在实践中使用,因为它非常缓慢且效率低下,因为通过键获取值可能很耗时。

  1. // Java program to demonstrate iteration
  2. // over keys and searching for values
  3. import java.util.Map;
  4. import java.util.HashMap;
  5. class IterationDemo
  6. {
  7. public static void main(String[] arg)
  8. {
  9. Map<String,String> gfg = new HashMap<String,String>();
  10. // enter name/url pair
  11. gfg.put("GFG", "geeksforgeeks.org");
  12. gfg.put("Practice", "practice.geeksforgeeks.org");
  13. gfg.put("Code", "code.geeksforgeeks.org");
  14. gfg.put("Quiz", "quiz.geeksforgeeks.org");
  15. // looping over keys
  16. for (String name : gfg.keySet())
  17. {
  18. // search for value
  19. String url = gfg.get(name);
  20. System.out.println("Key = " + name + ", Value = " + url);
  21. }
  22. }
  23. }

输出:

  1. Key = Quiz, Value = quiz.geeksforgeeks.org
  2. Key = Practice, Value = practice.geeksforgeeks.org
  3. Key = GFG, Value = geeksforgeeks.org
  4. Key = Code, Value = code.geeksforgeeks.org
文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,13747人围观)

还没有评论,来说两句吧...

相关阅读

    相关 怎么map上进行java

    在java中的map有很多种迭代方式,我们来看一下一些最常用的方式并且看一下他们的优点和缺点,因为java中的map都继承自Map接口,下边的接口适用于实现map接口的所有形式

    相关 如何 Java 任何 Map

    如何在 Java 中迭代任何 Map 在 Java中迭代Map 的方法通常有五种。在本文中,我们将讨论所有这些,并研究它们的优缺点。首先,我们不能直接使用iterator...