Java 中 Map 的 16 种遍历方式 及 性能对比

java 复制代码
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
}

Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    entries.next();
}

map.forEach((key, value) -> {
});

map.entrySet().stream().forEach((entry) -> {
});

map.entrySet().parallelStream().forEach((entry) -> {
});
java 复制代码
for (Integer key : map.keySet()) {
}

Iterator<Integer> iteratorKeySet = map.keySet().iterator();
while (iteratorKeySet.hasNext()) {
    iteratorKeySet.next();
}

map.keySet().forEach((key) -> {
});

map.keySet().stream().forEach((entry) -> {
});

map.keySet().parallelStream().forEach((entry) -> {
});
java 复制代码
for (Integer value : map.values()) {
}

Iterator<Integer> iteratorValues = map.values().iterator();
while (iteratorValues.hasNext()) {
    iteratorValues.next();
}

map.values().forEach((values) -> {
});

map.values().stream().forEach((entry) -> {
});

map.values().parallelStream().forEach((value) -> {
});

for (Integer key : map.keySet()) {
    map.get(key);
}

性能比较

java 复制代码
每种循环各遍历50000000次 total cost time = 3996 ms

map.entrySet()                           : 348 ms, 8.71%
map.entrySet().iterator()                : 356 ms, 8.91%
map.forEach                              : 235 ms, 5.88%
map.entrySet().stream().forEach          : 227 ms, 5.68%
map.entrySet().parallelStream().forEach  : 116 ms, 2.90%
map.keySet()                             : 294 ms, 7.36%
map.keySet().iterator()                  : 301 ms, 7.53%
map.keySet().forEach                     : 226 ms, 5.66%
map.keySet().stream().forEach            : 227 ms, 5.68%
map.keySet().parallelStream().forEach    : 126 ms, 3.15%
map.values()                             : 301 ms, 7.53%
map.values().iterator()                  : 303 ms, 7.58%
map.values().forEach                     : 219 ms, 5.48%
map.values().stream().forEach            : 228 ms, 5.71%
map.values().parallelStream().forEach    : 122 ms, 3.05%
map.keySet() → map.get(key)              : 358 ms, 8.96%
相关推荐
m0_480502644 分钟前
Rust 入门 KV存储HashMap (十七)
java·开发语言·rust
大阳12318 分钟前
线程(基本概念和相关命令)
开发语言·数据结构·经验分享·算法·线程·学习经验
小艳加油18 分钟前
Python机器学习与深度学习;Transformer模型/注意力机制/目标检测/语义分割/图神经网络/强化学习/生成式模型/自监督学习/物理信息神经网络等
python·深度学习·机器学习·transformer
杨DaB24 分钟前
【SpringBoot】Swagger 接口工具
java·spring boot·后端·restful·swagger
YA33325 分钟前
java基础(九)sql基础及索引
java·开发语言·sql
桦说编程1 小时前
方法一定要有返回值 \ o /
java·后端·函数式编程
小李是个程序1 小时前
登录与登录校验:Web安全核心解析
java·spring·web安全·jwt·cookie
奇树谦1 小时前
QT|windwos桌面端应用程序开发,当连接多个显示器的时候,如何获取屏幕编号?
开发语言·qt
David爱编程1 小时前
Java 创建线程的4种姿势,哪种才是企业级项目的最佳实践?
java·后端
weixin_307779132 小时前
VS Code配置MinGW64编译GNU 科学库 (GSL)
开发语言·c++·vscode·算法