JAVA 中对于Map 的遍历

Map 是JAVA 里一种非常重要的数据类型,而对于map 如何遍历是一个非常基础的问题。

Map<String, Integer> map = new HashMap<>();
{
	map.put("key1", 1);
    map.put("key2", 2);
    map.put("key3", 3);
}

Map 中存放的元素均为键值对,每一个键值对存在一个映射关系。Map 中采用Entry 内部类表示一个映射项——包含key 和value。而Set<Entry<K,V>> entrySet()该方法返回值就是Map 中各个键值对映射关系的集合。

用Entry 遍历:

for (Map.Entry<String, Object> entry : map.entrySet()) {
	String key = entry.getKey();
	Integer value = entry.getValue();
	System.out.println(key + ": " + value);
}
===========================================================
key1: 1
key2: 2
key3: 3

这种方法是比较常见的,能同时拿到Map 的key 与 value。

分别遍历key、value:

for (String key : map.keySet()) {
	System.out.println(key);
}
for (Integer value : map.values()) {
	System.out.println(value);
}
===========================================================
key1
key2
key3
1
2
3

这种方法适合在只需要取key 或value 的情况

通过迭代器Iterator 来遍历:

Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
	Map.Entry entry = (Map.Entry) iterator.next();
	String key = (String) entry.getKey();
	Integer value = (Integer) entry.getValue();
	System.out.println(key + ": " + value);
}

而实际上用泛型会更直观简单:

Iterator<String, Integer> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
	Map.Entry<String, Integer> entry = iterator.next;
	String key = entry.getKey();
	Integer value = entry.getValue();
	System.out.println(key + ": " + value);
}
===========================================================
key1: 1
key2: 2
key3: 3