- 浏览: 1489148 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (460)
- java (148)
- javascript (34)
- Flex文章 (4)
- css+div (2)
- ajax (6)
- extjs (11)
- 人生感悟 (9)
- struts2.0 (6)
- IT之路,生活 (15)
- hibernate (6)
- struts1 (1)
- spring (5)
- j2ee错误 (3)
- Dwr (5)
- Linux (33)
- C++ (3)
- SWT Win32 (2)
- EJB (1)
- JPA (4)
- C语言和LinuxC (7)
- SQL (13)
- 项目经理 (6)
- db2 (2)
- java数据结构 (2)
- 网页播放器flv (1)
- 数据库 (24)
- 用户体验设计学习 (2)
- 网络电话 (5)
- 军事理论 (4)
- android (3)
- oracle (18)
- oracle ebs form (11)
- oracle ebs oaf (4)
- erp (20)
- DBA (9)
- java中URL 的编码和解码函数 (1)
- 铁血丹心 (1)
- excel 单元格格式不能立即生效 (1)
- Java调用bat文件 (1)
- 如何把本地outlook中的邮件上传到网络邮箱中 (1)
- java 报表 打印 (1)
- 创建dblink (1)
- 图标前台框架 (1)
- vnc (1)
- FORM (1)
- MYSQL (1)
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
web打印不显示页眉页脚 -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
Javascript网页打印大全 -
hardyer:
大哥写的很实在,受教了,提前祝你元旦快乐!
黎活明给程序员的忠告 -
cxysilahi:
请问WIN7 64位,调用报错Exception in thr ...
JNative的初步使用 -
action1949:
好东西,解决问题
JFreeChart乱码解决方法
HashMap遍历效率问题
对于HashMap中的Key和Value的遍历有两种方法:
1.通过HashMap.keySet()方法返回key的集合,通过遍历该集合的key得到相应的value值。
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
2.通过HashMap.entrySet()方法返回整个Entry<K,V>对象的集合,遍历该集合中的每一个键值对Map.Entry类型,Entry.getValue() Entry.getKey()得到相应的值和键。
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();
}
两种方法虽然可以得到相同的结果,但是在效率上还是存在差别。
因为在第一种方式中遍历每一个key并通过HashMap.get(object key)来得到相应的值时,实际上这个过程会再次去遍历整个Entry 集合,以下是HashMap中的JDK1.6源码:
public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
return e.value;
}
return null;
}
因此第二种方法的效率会要高一些,经过测试发现的确也是这样的。
两个方法还有一个区别就是:第二种方法明显的要耗费更多的内存,因为Entry<K,V>肯定会比单独的Set<K>要大。
发表评论
-
Oracle Developer10G 安装
2020-09-09 18:03 383oracle 客户端也要删除,以前的oracle产品 ... -
打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion
2018-06-05 15:06 9784打开Eclipse时出现"The Eclipse ... -
J2EE通过tomcat部署的两种方式
2017-09-12 09:01 695转载:http://blog.csdn.net/psp000 ... -
Linux安装Tomcat7
2016-03-30 15:01 903http://blog.sina.com.cn/s/blog ... -
java支持跨平台获取cpuid、主板id、硬盘id、mac地址 (兼容windows、Linux)(转)
2015-11-17 22:10 1637http://blog.csdn.net/flyingclo ... -
栋哥涕啐茆
2015-10-27 10:49 785栋哥涕啐茆 -
Eclipse快捷键 10个最有用的快捷键
2015-10-27 10:18 820Eclipse中10个最有用的快捷键组合 一个Eclip ... -
java上传头像图像剪切
2015-04-02 20:19 1205java上传头像图像剪切 JQUERY 图片上传裁切 -
创建dblink
2014-12-11 20:01 713CREATE public database link ... -
Bitnami Redmine 安装笔记
2014-12-10 11:28 1673http://atian25.iteye.com/blog/ ... -
利用workflow发送类似数据报表内容的通知页面
2014-11-21 15:03 844利用workflow发送类似数据报表内容的通知页面 ... -
excel科学技术法问题
2014-11-12 13:50 8431.使用导入外部数据的方法2.并且在第三步的时候选择文本,需要 ... -
java.lang.IllegalAccessError
2014-09-29 11:05 1197java.lang.IllegalAccessError: ... -
java如何获取文件编码格式
2014-04-11 11:28 102611:简单判断是UTF-8或不是UTF-8,因为一般除了UTF ... -
JAVA中使用FTPClient上传下载
2013-12-08 13:35 1949方法一:这种方法网上有许多 可以用下面的方式,但是支持批量 ... -
在Java中获取环境变量
2013-11-11 11:18 1468package cy.cn.test; import ... -
ORACLE性能调整笔记
2013-11-05 18:39 0一 关于statspack中等待事件的一些解释 ... -
EBS DBA指南笔记1
2013-11-05 18:35 1937时光飞逝,不从事EBS DBA转眼已有两年多。很还念那段学习 ... -
用html代码在word中插入分页符和页面设置
2013-11-05 17:11 5360<span lang=EN-US style=&quo ... -
OpenJWeb新增二维码图片生成功能
2013-11-05 09:02 1308在开发进销存软件的时 ...
相关推荐
5. **HashMap遍历注意事项**: - 遍历HashMap时修改HashMap(添加、删除元素)可能会导致`ConcurrentModificationException`,因为迭代器无法检测到这种并发修改。 - 使用`keySet()`遍历并删除元素是安全的,但...
### HashMap遍历详解 在Java编程中,`HashMap`是一种常用的数据结构,它实现了`Map`接口,提供了基于哈希表的存储方式,允许我们快速地查找、插入和删除键值对。对于`HashMap`的遍历,是进行数据处理和分析时不可或...
在实际开发中,HashMap的遍历需注意线程安全问题。如果在多线程环境下,应使用ConcurrentHashMap,它提供了线程安全的遍历机制。此外,哈希函数的选择直接影响HashMap的性能,良好的哈希函数可以减少哈希冲突,提高...
4. 避免在多线程环境中直接使用HashMap:如果你确定不需要在多线程环境下共享HashMap,那么可以考虑局部变量的方式,只在单个线程中使用HashMap,这样就无需担心线程安全问题。 总结起来,理解HashMap的线程不安全...
HashMap遍历的常用方法主要有三种:迭代器(Iterator)遍历、键集(KeySet)遍历以及 Entry 集(entrySet)遍历。下面将逐一介绍这些方法。 1. 迭代器遍历: HashMap提供了迭代器接口(Iterator),可以通过调用`...
在Java编程中,哈希遍历(Hash Traversal)通常是指对...理解并熟练掌握HashMap的遍历方式,对于提升Java编程效率和代码质量至关重要。在实际工作中,根据需求选择合适的遍历方法,能有效优化代码的执行效率和可读性。
- **LinkedList**: 虽然插入和删除效率高,但由于查找也需要遍历,所以查找效率与`ArrayList`相同,也是O(n)。 **应用场景** - **HashMap**: 适用于需要快速查找、插入和删除,并且能接受偶尔的慢速查找(如存在...
### Java中遍历Map的四种方式及性能比较 在Java编程中,`Map`是一种非常重要的数据结构,用于存储键值对。对于`Map`的遍历,不同的遍历方式有着不同的性能表现以及适用场景。本文将详细介绍四种常见的遍历`Map`的...
HashMap的查询效率非常高,因为它可以通过哈希函数直接定位到Key-Value对的存储位置,而不需要遍历整个数组。 在Java中,HashMap广泛应用于Set、Map等容器中,用于快速根据Key找到元素。例如,Set的contains方法和...
1. 不保证元素顺序:HashMap在插入和遍历时不保持元素的原始插入顺序。 2. 可空性:键和值都可以为null,但一个HashMap只能有一个键为null的条目。 3. 默认容量:16,负载因子0.75,当容量达到负载因子乘以当前容量...
使用`entrySet()`方法可以一次性获取键值对,即`Map.Entry`对象,这样可以直接获取键和值,无需再次调用`get()`方法,从而提高了遍历效率。 #### 效率对比分析 从给出的例子中可以看到,作者进行了两种遍历方法的...
总结来说,HashMap 提供了快速的键值对存储和查找,但在遍历操作中需要注意效率。选择数据结构时,应考虑是否需要线程安全、是否频繁插入/删除、以及访问模式等因素。在多线程环境下,若需保证线程安全,可以考虑...
在Java编程语言中,`Map`接口是一...总之,遍历`Map`是Java编程中常见的需求之一,掌握正确的遍历方法不仅可以提高代码的效率,还可以避免潜在的错误。希望本文的内容能帮助你更好地理解和使用Java中的`Map`遍历技巧。
### Map遍历的四种方法 在Java编程语言中,`Map`是一种常用的数据结构,用于存储键值对。为了能够有效地处理和操作这些键值对...在实际开发过程中,理解和灵活运用这些遍历技巧对于提高代码质量和效率具有重要意义。
为了解决这个问题,HashMap提供了自动扩容机制。 **3.1 扩容触发条件** 当HashMap中的元素数量超过容量大小与负载因子的乘积时,HashMap会自动扩容。默认负载因子为0.75,这意味着当HashMap的填充率达到75%时,会...
遍历HashMap有多种方式。第一种是通过entrySet()迭代器,可以同时获取键值对;第二种是通过keySet()迭代器,需要再次通过get()获取值;第三种是使用Java 8引入的forEach()方法,通过Lambda表达式简洁地遍历。其中,...
6. **迭代性能**:由于HashMap使用链表解决哈希碰撞,如果某个哈希桶内的链表过长(例如,出现大量键的哈希码冲突),那么在遍历HashMap时,性能会下降到接近于O(n),其中n是链表的长度。 7. **键的唯一性**:...
本文将详细讲解两种主要的遍历Map元素的方法,并分析它们的效率差异。 ### 方法一:通过`entrySet()`遍历 这是推荐的遍历Map元素的方式,因为它具有较高的效率。通过调用`Map.entrySet()`方法,我们可以获取到Map...