Java 遍历 Map 的 5 种方式

🏷️ 365500元大写 📅 2025-08-12 23:26:11 👤 admin 👀 700 ⭐ 343
Java 遍历 Map 的 5 种方式

Java 中遍历 Map 有多种方法, 从最早的迭代器 Iterator, 到 JDK 5 开始支持的增强型 for 循环 —— 即 foreach, 再到 JDK 8 的 Lambda 表达式, 让我们一起来看下具体的用法及其优缺点.

1 通过 keySet() 或 values() 方法遍历

如果只需要获取 Map 的 key 或者 value, 通过 Map 的 keySet() 或 values() 方法无疑是最方便的:

1 public class TestMap {

2 /**

3 * Map 的扩容比较消耗性能, 因此若能确定存储数据的大小,

4 * 在初始化时指定初始容量是一个不错的实践技巧

5 */

6 private static Map map = new HashMap<>(16);

7

8 /** keySet 获取 key */

9 public void testKeySet() {

10 for (Integer key : map.keySet()) {

11 System.out.println(key);

12 }

13 }

14 /** values 获取 value */

15 public void testValues() {

16 for (Integer value : map.values()) {

17 System.out.println(value);

18 }

19 }

20 }

2 通过 keySet 的 get(key) 获取值

如果需要同时获取 key 和 value, 可以通过先获取 key, 然后再通过 Map 的 get(key) 获取对应的 value.

注意: 该方法不是最优选择, 一般不推荐使用.

1 /** keySet get(key) 获取key and value */

2 public void testKeySetAndGetKey() {

3 for (Integer key : map.keySet()) {

4 System.out.println(key + ":" + map.get(key));

5 }

6 }

3 通过 entrySet 遍历

通过对 Map 的 entrySet 进行遍历, 也可以同时拿到 key 和 value.

该方法是最常用的遍历 Map 的方法, 大多情况下, 其性能要优于第2种.

1 /**

2 * entrySet 获取 key 和 value, Entry 是 Map 内部存储数据的逻辑容器

3 */

4 public void testEntry() {

5 for (Map.Entry entry : map.entrySet()) {

6 System.out.println(entry.getKey() + ":" + entry.getValue());

7 }

8 }

4 通过迭代器 Iterator 遍历

上面的几种遍历方法都用了增强型 for 循环 —— foreach, 这是 JDK 5 开始才有的特性.

foreach 的操作虽然看起来很简洁, 但有一个劣势: 遍历 Map 时, 如果改变其大小, 就会抛出并发修改异常. 但如果在遍历时只需要删除 Map 中的元素, 那就可以用 Iterator 的 remove() 方法删除元素:

1 /** Iterator 获取 key 和 value */

2 public void testIterator() {

3 Iterator> it = map.entrySet().iterator();

4 while (it.hasNext()) {

5 Map.Entry entry = it.next();

6 System.out.println(entry.getKey() + ":" + entry.getValue());

7 // 删除元素

8 // it.remove();

9 }

10 }

5 通过 Lambda 表达式遍历

JDK 8 提供了 Lambda 表达式支持, 其语法看起来更简洁, 可以同时拿到 key 和 value.

不过, 经过简单的测试, Lambda 表达式遍历 Map 的速度要低于 entrySet 遍历的方式, 所以更推荐用 entrySet 去遍历 Map.

1 /** Lambda 获取key and value */

2 public void testLambda() {

3 map.forEach((key, value) -> {

4 System.out.println(key + ":" + value);

5 });

6 }

6 总结 - 遍历 Map 的实践建议

(1) 如果只获取 key 或者 value, 推荐使用 keySet() 或 values() 方法;(2) 如果需要同时获取 key 和value, 推荐使用 entrySet;(3) 如果需要在遍历过程中删除元素, 推荐使用 Iterator;(4) 如果需要在遍历过程中添加元素, 可以新建一个临时 Map 存放新增的元素, 遍历结束后, 再把临时 Map 添加到原 Map 中.

相关推荐 ✨