Java中遍历HashMap的方法

Java中遍历HashMap的方法

技术背景

在Java编程中,HashMap 是一种常用的数据结构,用于存储键值对。当我们需要处理 HashMap 中的元素时,就需要对其进行遍历。了解不同的遍历方法及其优缺点,有助于我们根据具体需求选择最合适的方式,提高代码的性能和可读性。

实现步骤

方法一:使用For - Each循环遍历键值对(entrySet)

这是最常用的方法,适用于需要同时获取键和值的场景。

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 100);
map.put(2, 200);
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
}
}

方法二:使用For - Each循环遍历键或值

如果只需要键或值,可以分别使用 keySet()values() 方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 100);
map.put(2, 200);
// 遍历键
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
// 遍历值
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
}
}

方法三:使用迭代器(Iterator)遍历

在旧版本的Java中,或者需要在遍历过程中删除元素时,可使用此方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Main {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 100);
map.put(2, 200);
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<Integer, Integer> entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
}
}

方法四:遍历键并通过键获取值(不推荐)

此方法虽然代码简洁,但性能较差,不建议使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) {
Map<Integer, Integer> map = new HashMap<>();
map.put(1, 100);
map.put(2, 200);
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
}
}

最佳实践

  • 如果只需要键或值,使用方法二,能获得更好的性能和更简洁的代码。
  • 如果需要同时获取键和值,且不需要在遍历过程中删除元素,优先使用方法一。
  • 如果使用的是旧版本的Java(Java 5之前),或者需要在遍历过程中删除元素,使用方法三。
  • 避免使用方法四,因为它的性能较低。

常见问题

1. ConcurrentModificationException异常

在使用For - Each循环遍历 HashMap 时,如果在遍历过程中修改了 HashMap 的结构(如删除元素),会抛出 ConcurrentModificationException 异常。解决方法是使用迭代器的 remove() 方法(方法三)。

2. NullPointerException异常

在使用For - Each循环遍历 HashMap 时,如果 HashMapnull,会抛出 NullPointerException 异常。因此,在遍历之前应先检查 HashMap 是否为 null

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.HashMap;
import java.util.Map;

public class Main {
public static void main(String[] args) {
Map<Integer, Integer> map = null;
if (map != null) {
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
}
}
}

Java中遍历HashMap的方法
https://119291.xyz/posts/2025-04-22.java-hashmap-iteration-methods/
作者
ww
发布于
2025年4月22日
许可协议