一文教会你如何遍历Java中的Map集合

一文教会你如何遍历Java中的Map集合

map集合是java中最常用的数据结构之一,而map遍历也是最常用的算法之一,由于博主每次在遍历map时都需要去网站查找,索性本次对map常用遍历方式进行整理,以便后续查阅使用。

1、定义map数据

代码如下:

public Map getMapData() {

// 初始化Map

Map 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 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 map = getMapData();

System.out.println("map数据:" + map);

System.out.println();

// 遍历Map

Iterator 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 map = getMapData();

System.out.println("map数据:" + map);

System.out.println();

// 遍历Map

Iterator> entries = map.entrySet().iterator();

System.out.println("通过map.entrySet使用iterator遍历输出结果:");

while (entries.hasNext()) {

Map.Entry 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 map = getMapData();

System.out.println("map数据:" + map);

System.out.println();

// 遍历Map

System.out.println("通过for-each迭代entries,使用map.entrySet遍历输出结果:");

for (Map.Entry 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 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的方式遍历(即方式五),语法简洁且高效。

相关阅读