如何在 Java 中迭代任何 Map 2021-08-14 17:38 9281阅读 0赞 # 如何在 Java 中迭代任何 Map 在 Java中迭代[Map 的](https://www.geeksforgeeks.org/map-interface-java-examples/)方法通常有**五种**。在本文中,我们将讨论所有这些,并研究它们的优缺点。首先,我们**不能**直接使用[iterators 迭代](https://www.geeksforgeeks.org/iterators-in-java/)Map,因为 Map 不是[Collection。](https://www.geeksforgeeks.org/collections-in-java-2/)此外,在继续之前,您必须对[Map.Entry](https://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html)接口有所了解。由于 Java 中的所有映射都实现了[Map](https://www.geeksforgeeks.org/map-interface-java-examples/)接口,因此以下技术适用于任何映射实现([HashMap](https://www.geeksforgeeks.org/java-util-hashmap-in-java/)、[TreeMap](https://www.geeksforgeeks.org/hashmap-treemap-java/)、[LinkedHashMap](https://www.geeksforgeeks.org/linkedhashmap-class-java-examples/)、[Hashtable](https://www.geeksforgeeks.org/java-util-hashtable-class-java/)等) **1. 使用 For-Each 循环迭代 Map.entrySet() :** *Map.entrySet()*方法返回此映射中包含的映射的集合视图(*Set<Map.Entry<K, V>>*)。所以我们可以使用[Map.Entry 的](https://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html)*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 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 上**](https://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html) **使用迭代器进行迭代** 这种方法与第一种方法有些相似。在第一种方法中,我们在 Map.Entry<K, V> 上使用 for-each 循环,但在这里我们使用[迭代器](https://www.geeksforgeeks.org/iterators-in-java/)。在 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 表达式](https://www.geeksforgeeks.org/lambda-expressions-java-8/)迭代映射。这种技术既干净又快速。 ``` // 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 ``` 文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。
相关 如何在 Java 中迭代任何 Map 如何在 Java 中迭代任何 Map 在 Java中迭代Map 的方法通常有五种。在本文中,我们将讨论所有这些,并研究它们的优缺点。首先,我们不能直接使用iterator... 朱雀/ 2021年08月14日 17:38/ 0 赞/ 9282 阅读
相关 Python中的迭代器与可迭代 很多人在听到迭代器与可迭代这两个名词时往往会搞不清楚,甚至认为他们是一样的,但是实际上他们是不同的概念。 我们先来直观的区分这两者有什么不同。 可迭代 (iterable) ╰半夏微凉°/ 2022年02月26日 08:52/ 0 赞/ 109 阅读
相关 JAVA之双列集合如何迭代? 1:通过查看Map集合的API,发现没有iterator方法,那么双列集合如何迭代呢? (1) 根据键获取值 (Set集合有iterator方法) 红太狼/ 2022年05月24日 20:05/ 0 赞/ 34 阅读
相关 学习Java中关于迭代 此处是百度所得:迭代 标准的定义: 在RUP中,迭代被定义为:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。 小灰灰/ 2022年06月11日 15:27/ 0 赞/ 133 阅读
相关 jsp迭代list和map集合 其中要使用jstl标签库,需要导入jstl必要的jar包 <%@page import="cn.itcast.domain.Person"%> <%@page 悠悠/ 2022年08月12日 17:30/ 0 赞/ 37 阅读
相关 怎么在map上进行迭代(java) 在java中的map有很多种迭代方式,我们来看一下一些最常用的方式并且看一下他们的优点和缺点,因为java中的map都继承自Map接口,下边的接口适用于实现map接口的所有形式 短命女/ 2022年08月19日 12:52/ 0 赞/ 117 阅读
相关 python迭代器什么时候用_如何在python中使用迭代器 好吧,这里有很多python代码中的问题。在 从简单的开始while ip\['cp'\] != \[\]: 可以简单地写信给 ^\{pr2\}$ 当ip\['cp'\ 柔光的暖阳◎/ 2022年10月28日 08:59/ 0 赞/ 59 阅读
相关 java迭代list_在Java中迭代列表的方法 对于Java语言有些陌生,我试图使自己熟悉所有可能遍历列表(或其他集合)的方式(或至少是非病理性方式)以及每种方式的优缺点。 给定一个List list对象,我知道以下遍历所 川长思鸟来/ 2022年11月03日 13:46/ 0 赞/ 79 阅读
相关 迭代模式 java_java设计模式_迭代器模式 ![a3ef783dacc4485d22e1a0dc4663a7aa.png][] /\\ \ @Title: Aggregate.java \ @Package com 系统管理员/ 2022年11月05日 18:54/ 0 赞/ 43 阅读
相关 说说 Java 迭代器 Java 迭代器是一个对象,它在一个序列中单向移动并可操作该序列中的每个元素对象。 ![format_png][] 1 基本用法 除了单向移动这个特性之外,还包含了获 清疚/ 2022年12月02日 12:08/ 0 赞/ 36 阅读
还没有评论,来说两句吧...