千家信息网

JavaHashMap三种循环遍历方式及其性能对比的实例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,JavaHashMap三种循环遍历方式及其性能对比的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。下面讲述了Ja
千家信息网最后更新 2026年11月01日JavaHashMap三种循环遍历方式及其性能对比的实例分析

JavaHashMap三种循环遍历方式及其性能对比的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

下面讲述了Java HashMap三种循环遍历方式及其性能对比。具体如下:

HashMap的三种遍历方式

(1)for each map.entrySet()

Map map = new HashMap();for (Entry entry : map.entrySet()) { entry.getKey(); entry.getValue();}

(2)显示调用map.entrySet()的集合迭代器

Iterator> iterator = map.entrySet().iterator();while (iterator.hasNext()) { entry.getKey(); entry.getValue();}

(3)for each map.keySet(),再调用get获取

Map map = new HashMap();for (String key : map.keySet()) { map.get(key);}

三种遍历方式的性能测试及对比

测试环境:Windows7 32位系统 3.2G双核CPU 4G内存,Java 7,Eclipse -Xms512m -Xmx512m

测试结果:

map size 10,000 100,000 1,000,000 2,000,000 for each entrySet 2ms 6ms 36ms 91ms for iterator entrySet 0ms 4ms 35ms 89ms for each keySet 1ms 6ms 48ms 126ms

遍历方式结果分析

由上表可知:

for each entrySet与for iterator entrySet性能等价 for each keySet由于要再调用get(key)获取值,比较耗时(若hash散列算法较差,会更加耗时) 在循环过程中若要对map进行删除操作,只能用for iterator entrySet(在HahsMap非线程安全里介绍)。

HashMap entrySet源码

private final class EntryIterator extends HashIterator> {

public Map.Entry next() {

return nextEntry();

}

}

HashMap keySet源码

private final class KeyIterator extends HashIterator { public K next() { return nextEntry().getKey(); }}

由源码可知:

keySet()与entrySet()都是返回set的迭代器。父类相同,只是返回值不同,因此性能差不多。只是keySet()多了一步根据key get value的操作而已。get的时间复杂度取决于for循环的次数,即hash算法。

public V get(Object key) {

if (key == null) return getForNullKey();

Entry entry = getEntry(key);

return null == entry ? null : entry.getValue();}

/**

1. Returns the entry associated with the specified key in the

2. HashMap. Returns null if the HashMap contains no mapping 3. for the key. */final Entry getEntry(Object key) {

int hash = (key == null) ? 0 : hash(key);

for (Entry e = table[indexFor(hash, table.length)];

e != null;

e = e.next) {

Object k;

if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e;

} return null;

}

循环中需要key、value,但不对map进行删除操作,使用for each entrySet 循环中需要key、value,且要对map进行删除操作,使用for iterator entrySet 循环中只需要key,使用for each keySet

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

循环 性能 方式 源码 测试 分析 只是 算法 结果 帮助 迭代 实例 实例分析 不同 不对 复杂 清楚 相同 较差 安全 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会 新华互联网科技学校 互联网科技股票 远信互联网科技 上海喔噻互联网科技 互联网科技汛 科技赋能互联网健康 彤创互联网科技有限公司 浙江互联网科技研学营 华夏互联网科技业 晓花互联网科技有限公司网址 深圳育鹏互联网科技有限公司招聘 深圳市罗太互联网科技有限公司 山东子淼互联网科技有限公司 下一代互联网重大应用科技园 易企秀互联网科技是做什么的 华人运通互联网科技公司 河南商务圈互联网科技有限公司 平安好医生打造互联网科技医疗 互联网科技创新方面的资料 西安互联网科技公司 互联网科技网站 金融科技和互联网金融 浙南科技城互联网大厦建设工程 黑科技 体验场景 互联网大会 昆明中奇联合互联网科技 艺电能源互联网科技有限公司招聘 互联网科技博主张洲 山东蛋芒互联网科技有限公司 北京瑞云互联网科技有限公司
0