HashMap遍历方式
来源:互联网 发布:淘宝预售如何合并付款 编辑:程序博客网 时间:2024/06/10 19:39
Java中HashMap有两种遍历方式:
第一种:entrySet方式(效率高,推荐使用)
Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); }
第二种:keySet方式(效率低,只是需要key集合时可以使用)
Map map = new HashMap(); Iterator iter = map.keySet().iterator(); while (iter.hasNext()) { Object key = iter.next(); Object val = map.get(key); }
比较说明:
对于keySet其实遍历了两次:一次将HashMap的key集合转化到keySet中,一次在HashMap中取出key所对应的Value;
对于entrySet只是遍历了一次:将key和value作为一个实体entry放置与entrySet中,转化为iterator(迭代器);
java.util.ConcurrentModificationException异常:
java语言中,如果遍历map、collection、list等集合时(包括使用fail-fast Iterator对集合进行迭代操作),如果直接调用
list.remove方法等修改数据源时,可能抛出java.util.ConcurrentModificationException异常!
原理如下:
Iterator 是工作在一个独立的线程中,并且拥有一个mutex锁。 Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数
量发生变化时,这个索引表的内容不会同步改变,所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马
上抛出 java.util.ConcurrentModificationException 异常。
所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。但你可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove()方法会在删除当前迭代对象的同时维护索引的一致性。
有意思的是如果你的 Collection / Map 对象实际只有一个元素的时候, ConcurrentModificationException 异常并不会被抛出。这也就是为什么在 javadoc 里面指出: it would be wrong to write a program that depended on this exception for its correctness:
ConcurrentModificationException should be used only to detect bugs.
Java中集合之元素顺序问题:
参考地址:http://www.cnblogs.com/taotaoblog/archive/2009/09/19/1569958.html
List遍历输出是有序的(依据add顺序输出),而HashMap的遍历输出没有顺序可言(误解:put添加顺序输出的理解是错误的),
数据结构不一样!
- HashMap遍历方式
- HashMap的遍历方式
- HashMap 遍历方式
- HashMap的遍历方式
- HashMap的遍历方式
- 两种方式遍历HashMap
- java遍历HashMap的方式
- 遍历 HashMap简单的方式
- 两种方式遍历HashMap
- HashMap的遍历最优方式
- hashmap四种遍历方式
- HashMap两种遍历方式
- 两种方式遍历HashMap
- Java HashMap遍历方式探讨
- hashmap的遍历最优方式
- HashMap遍历的两种方式
- 遍历HashMap的常用两种方式
- HashMap遍历的两种方式
- POJ_3190_Stall Reservations
- PAT数组-11. 猴子选大王(20)
- EJB学习笔记01,了解企业级开发!
- linux虚拟机上网配置
- jQuery源码分析——jQuery对象怎么来的
- HashMap遍历方式
- Java插入时对时间的保存
- mongodb中obj()使用问题
- HDU 2066 一个人的旅行(Dijkstra)
- word ladder
- bzoj1189 [HNOI2007]紧急疏散evacuate
- tchar.h 与windows.h同时使用时的注意事项
- using namespace std
- linux基本命令学习(3)--ln和lndir