一文教会你如何遍历Java中的Map集合
map集合是java中最常用的数据结构之一,而map遍历也是最常用的算法之一,由于博主每次在遍历map时都需要去网站查找,索性本次对map常用遍历方式进行整理,以便后续查阅使用。
1、定义map数据
代码如下:
public Map<String, String> getMapData() {
// 初始化Map
Map<String, String> map = new HashMap<>(4);
map.put("001", "Java");
map.put("002", "C++");
map.put("003", "Python");
map.put("004", "Html");
// 返回map数据
return map;
}
后续测试使用的map数据均通过调用该方法得到。
2、遍历Map数据
2.1、方式一:通过map.keySet
遍历
该方式是博主遍历map时最容易想到的一个方式,也是最常用的,该方式通过对key进行增强for
循环遍历,根据key从map中再获取value。
测试代码:
/**
* 通过map.keySet遍历
*/
@Test
public void testMap1() {
// 初始化Map
Map<String, String> map = getMapData();
System.out.println("map数据:" + map);
System.out.println();
// 遍历Map
System.out.println("通过map.keySet遍历输出结果:");
for (String key : map.keySet()) {
System.out.println("key = " + key + ", value = " + map.get(key));
}
}
测试结果:
2.2、方式二:通过map.keySet
使用iterator
遍历
该方式同方式一有些类似,也是通过使用map.keySet
进行遍历,不过是使用其迭代器的方式通过while
循环进行遍历。
测试代码:
/**
* 通过map.keySet使用iterator遍历
*/
@Test
public void testMap2() {
// 初始化Map
Map<String, String> map = getMapData();
System.out.println("map数据:" + map);
System.out.println();
// 遍历Map
Iterator<String> iterator = map.keySet().iterator();
System.out.println("通过map.keySet使用iterator遍历输出结果:");
while (iterator.hasNext()) {
String key = iterator.next();
String value = map.get(key);
System.out.println("key = " + key + ", value = " + value);
}
}
测试结果:
2.3、方式三:通过map.entrySet
使用iterator
遍历
该方式是直接使用map.entrySet
的迭代器,通过遍历该迭代器可以直接同时拿到key和value的值,不用再从map中根据key去获取value的值。
测试代码:
/**
* 通过map.entrySet使用iterator遍历
*/
@Test
public void testMap3() {
// 初始化Map
Map<String, String> map = getMapData();
System.out.println("map数据:" + map);
System.out.println();
// 遍历Map
Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
System.out.println("通过map.entrySet使用iterator遍历输出结果:");
while (entries.hasNext()) {
Map.Entry<String, String> entry = entries.next();
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
}
测试结果:
2.4、方式四:通过增强for循环
迭代entries
,使用map.entrySet
遍历
该方式同方式三类似,也是直接使用map.entrySet
,只不过不再使用迭代器,直接通过增强for循环
的方式进行遍历。
测试代码:
/**
* 通过for-each迭代entries,使用map.entrySet遍历
*/
@Test
public void testMap4() {
// 初始化Map
Map<String, String> map = getMapData();
System.out.println("map数据:" + map);
System.out.println();
// 遍历Map
System.out.println("通过for-each迭代entries,使用map.entrySet遍历输出结果:");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
}
}
测试结果:
2.5、方式五:通过使用map.forEach
的方式进行遍历
如果使用的是java8及以上版本,推荐使用该方式进行遍历,该方式直接使用map.forEach
结合lambda
的方式对map进行遍历,语法相较于之前的四种方式更加简洁。
测试代码:
/**
* 通过使用map.forEach的方式进行遍历
*/
@Test
public void testMap5() {
// 初始化Map
Map<String, String> map = getMapData();
System.out.println("map数据:" + map);
System.out.println();
// 遍历Map
System.out.println("通过使用map.forEach的方式进行遍历输出结果:");
map.forEach((key, value) -> System.out.println("key = " + key + ", value = " + value));
}
测试结果:
3、map遍历使用总结
如果使用的是Java8之前的版本,推荐使用map.entrySet
的方式对map集合进行遍历(即方式三和方式四),而不是使用map.keySet
的方式遍历,区别如下:map.keySet
只存放了map
的key值
的集合,在使用map.keySet
遍历map时,需要遍历map两次,第一次是遍历对应的keySet
,第二次是根据每一个key
从map中取出key
所对应的value值。而entrySet
存放的是映射关系的set集合
,只需要遍历了次,就可以把key和value都放到了entry中一并取出,效率更高。
如果使用的是Java8之后的版本,推荐使用map.forEach
的方式遍历(即方式五),语法简洁且高效。
- 点赞
- 收藏
- 关注作者
评论(0)