`
happyqing
  • 浏览: 3163520 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java map迭代(遍历map)

    博客分类:
  • java
阅读更多

在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的几种方法分析

    主要介绍了java遍历Map的几种方法,结合实例形式分析了使用循环与迭代等方法操作Map遍历的相关技巧,需要的朋友可以参考下

    java遍历特例

    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(); ...

    vector list map 遍历删除制定元素 防止迭代器失效的实例

    #include &lt;map&gt; #include #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { printf(“run main”); vector&lt;int&gt; vect ; vect.push_back(1); vect.push_back(2); vect.push_ba

    JAVA核心知识点整理.zip

    Iterator:迭代器,可以通过迭代器遍历集合中的数据 Map:是映射表的基础接口 4. JAVA 多线程并发 5. JAVA 基础 5.1JAVA 异常分类及处理 5.2JAVA 反射 5.3JAVA 注解 5.4JAVA 内部类 5.5JAVA ...

    Java容器有两种基本类型Collection 和 Map

    LinkedHashMap 类似于 HashMap,但是迭代器遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)次序。TreeMap 是基于红黑树的实现,查看“键”或“键值对”时,它们会被排序(次序由 Comparable...

    Java 容器.pdf_电子版pdf版

    1. 迭代器模式:Collection 继承了 Iterable 接口,其中的 iterator() 方法能够产生一个 Iterator 对象,通过这个对象就可以迭代遍历 Collection 中的元素。 2. 适配器模式:java.util.Arrays#asList() 可以把数组...

    字节大佬总结的Java面试资料

    2. Iterator:迭代器,可以通过迭代器遍历集合中的数据 3. Map:是映射表的基础接口 Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对 TCP、UDP 和文件传输的支持,作为一...

    C++ map使用

    1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。...遍历所有记录。

    皮尔逊-III相关\皮尔逊相关系数的java实现.docx

    在上面的代码中,我们使用了一个Map来存储评分数据,然后使用迭代器来遍历Map,并计算皮尔逊相关系数。注意,这只是一个简单的示例代码,实际实现中可能需要更多的计算和处理。 皮尔逊相关系数是一种简单而有效的...

    Java数据存储类型ArrayList、HashSet、HashMap、LinkedList使用不同遍历方法效率研究By Python

    Java不同数据存储类型使用不同遍历方法效率研究 GitHub代码仓库 数据存储类型 ArrayList HashSet HashMap LinkedList 遍历方法 传统遍历方法 for(int i=0;i&lt;list.size();i++) { String str = list.get(i); ... ...

    Iterator迭代器的简单介绍与使用

    集合遍历接口java.util.Iterator,Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,...

    Python内置函数之filter map reduce介绍

    调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。 &gt;&gt;&gt; N=range(10) &gt;&gt;&gt; print filter(lambda x:x&gt;5,N) [6, 7, 8, 9] 2. map函数func作用于给定序列的每个元素,...

    java高级编程必须知道的集合详细讲解

    集合框架的迭代和遍历: 解释如何使用迭代器和增强 for 循环来遍历集合中的元素。讲解如何避免在遍历过程中发生并发修改异常。 集合框架的性能和选择: 探讨集合框架中各种实现类的性能比较,讲解如何根据需求选择...

    java 集合并发操作出现的异常ConcurrentModificationException

    Map在遍历时候通常 现获得其键值的集合Set,然后用迭代器Iterator来对Map进行遍历。

    python zip,lambda,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...

    C++中 map的基本操作

    1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。...遍历所有记录。 3、使用map 使用map得包含map类所在的头文件 #include

    java学习笔记

    java学习必看,适合初学者辅助学习。集合中常用的是:ArrayList,HashSet,HashMap。其中ArrayList和HashMap...遍历Map,使用keySet()可以返回set值,用keySet()得到key值,使用迭代器遍历,然后使用put()得到value值。

    springMVC poi解析ajax上传excel文件,返回json对象\list数组

    poi解析excel功能参数说明 ...这个与上面工具类类似,不过这个是解析本地excel文件不是使用的流,使用迭代遍历sheet工作簿与每行每列的值,将所有类型作为String类型处理返回一个json对象输出至控制台

Global site tag (gtag.js) - Google Analytics