在java中有很多种方法来遍历map。接下来我们就回顾下最常用的方法,并且比较下他们的优缺点。 各种map 在java中都实现了map接口,下面的方法适合任何一种map,只要是实现了map接口的。像hashmap,treemap,LinkeHashMap,Hashtable等等。
方法#1:通过循环entries 来遍历map
这种方法是最通用和效率比较好的方法。适合同时需要map的key 和value的情况。
Map<String, String> map = new HashMap <String, String>(); Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator(); while(entries.hasNext()){ Map.Entry<String, String> entry = entries.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); }
由于foreach循环是在java5开始有的,所以这种方法适合比较新的版本。而且这个循环会抛空指针错误,如果你循环的map 为null,所以使用时候要检查是否为null.
方法#2 通过循环key和value 来遍历
如果你只是需要map的key或者values ,你可以循环遍历entrySet的keySet或者values
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); //iterating over keys only for (Integer key : map.keySet()) { System.out.println("Key = " + key); }//iterating over values only for (Integer value : map.values()) { System.out.println("Value = " + value); }
方法#3 使用迭代器 iterator
通常:
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<Integer, Integer> entry = entries.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); }
不寻常的:
Map map = new HashMap(); Iterator entries = map.entrySet().iterator(); while (entries.hasNext()) { Map.Entry entry = (Map.Entry) entries.next(); Integer key = (Integer) entry.getKey(); Integer value = (Integer) entry.getValue(); System.out.println("Key = " + key + ", Value = " + value); }
你可以使用同样的方法去迭代keyset和values.
这种方法看起来很繁琐,但是他有他的优势。首先这个是唯一的使用老版本的map的迭代方法。其次这也是唯一一个允许在迭代过程中通过iterator.remove()来删除map中的数据。如果你试图在foreach方法中进行删除操作,你会得到预料不到的结果。
从性能方面来说,这个方法与foreach循环相当。
方法#4 通过遍历key来获取对应的value
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for (Integer key : map.keySet()) { Integer value = map.get(key); System.out.println("Key = " + key + ", Value = " + value); }
这个方法可以认为是方法#1的缩减版,但是从实际来看,这种方法是非常慢和效率低下的,因为通过key来获取value是比较耗时的。(这种方法对不同的map实现会比第一种方法慢20%--200%)。如何你有安装findbugs,你就可以检测到。鉴于效率来说,这个方法需要避免使用。
结论:
如何你只需要keys或者只需要values,使用方法#2.如果你是老的版本,并且有删除操作的使用方法#3。其他使用#1.
相关推荐
主要介绍了java遍历Map的几种方法,结合实例形式分析了使用循环与迭代等方法操作Map遍历的相关技巧,需要的朋友可以参考下
java Map 遍历方法 Map map = new HashMap(); Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); ...
#include <map> #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { printf(“run main”); vector<int> vect ; vect.push_back(1); vect.push_back(2); vect.push_ba
Iterator:迭代器,可以通过迭代器遍历集合中的数据 Map:是映射表的基础接口 4. JAVA 多线程并发 5. JAVA 基础 5.1JAVA 异常分类及处理 5.2JAVA 反射 5.3JAVA 注解 5.4JAVA 内部类 5.5JAVA ...
LinkedHashMap 类似于 HashMap,但是迭代器遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)次序。TreeMap 是基于红黑树的实现,查看“键”或“键值对”时,它们会被排序(次序由 Comparable...
1. 迭代器模式:Collection 继承了 Iterable 接口,其中的 iterator() 方法能够产生一个 Iterator 对象,通过这个对象就可以迭代遍历 Collection 中的元素。 2. 适配器模式:java.util.Arrays#asList() 可以把数组...
2. Iterator:迭代器,可以通过迭代器遍历集合中的数据 3. Map:是映射表的基础接口 Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对 TCP、UDP 和文件传输的支持,作为一...
1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。...遍历所有记录。
在上面的代码中,我们使用了一个Map来存储评分数据,然后使用迭代器来遍历Map,并计算皮尔逊相关系数。注意,这只是一个简单的示例代码,实际实现中可能需要更多的计算和处理。 皮尔逊相关系数是一种简单而有效的...
Java不同数据存储类型使用不同遍历方法效率研究 GitHub代码仓库 数据存储类型 ArrayList HashSet HashMap LinkedList 遍历方法 传统遍历方法 for(int i=0;i<list.size();i++) { String str = list.get(i); ... ...
集合遍历接口java.util.Iterator,Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,...
调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。 >>> N=range(10) >>> print filter(lambda x:x>5,N) [6, 7, 8, 9] 2. map函数func作用于给定序列的每个元素,...
集合框架的迭代和遍历: 解释如何使用迭代器和增强 for 循环来遍历集合中的元素。讲解如何避免在遍历过程中发生并发修改异常。 集合框架的性能和选择: 探讨集合框架中各种实现类的性能比较,讲解如何根据需求选择...
Map在遍历时候通常 现获得其键值的集合Set,然后用迭代器Iterator来对Map进行遍历。
通常用于将两个列表合并在一起以同时进行迭代遍历 注意:直接使用zip输出结果为,要配合list一起使用 a = [1, 2, 3] b = [4, 5, 6] zip(a,b) # print(list(zip(a, b))) # [(1, 4), (2, 5), (3, 6)] print(list...
1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。...遍历所有记录。 3、使用map 使用map得包含map类所在的头文件 #include
java学习必看,适合初学者辅助学习。集合中常用的是:ArrayList,HashSet,HashMap。其中ArrayList和HashMap...遍历Map,使用keySet()可以返回set值,用keySet()得到key值,使用迭代器遍历,然后使用put()得到value值。
poi解析excel功能参数说明 ...这个与上面工具类类似,不过这个是解析本地excel文件不是使用的流,使用迭代遍历sheet工作簿与每行每列的值,将所有类型作为String类型处理返回一个json对象输出至控制台