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

举报
lwq1228 发表于 2021/09/17 11:51:04 2021/09/17
【摘要】 map集合是java中最常用的数据结构之一,而map遍历也是最常用的算法之一,由于博主每次在遍历map时都需要去网站查找,索性本次对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只存放了mapkey值的集合,在使用map.keySet遍历map时,需要遍历map两次,第一次是遍历对应的keySet,第二次是根据每一个key从map中取出key所对应的value值。而entrySet存放的是映射关系的set集合,只需要遍历了次,就可以把key和value都放到了entry中一并取出,效率更高。

如果使用的是Java8之后的版本,推荐使用map.forEach的方式遍历(即方式五),语法简洁且高效。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。