Java基础学习|如何遍历Map

发布时间:2024年01月25日

在这里插入图片描述

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、
🔥 三连支持:欢迎 ??关注、👍点赞、👉收藏三连,支持一下博主~

前言

Map的循环遍历是一种很常见的循环遍历,他可被用于数组、对象、集合等多种数据类型之间进行循环遍历,获取数据的值。Map的用途很广,所有的的开发者Map应该都不陌生,每次面试也都会遇到Map相关的很多问题。本篇主要想简单介绍下Map的循环遍历相关的特性以及使用Map的一些思考。

什么是Map

Map是一个接口容器,用来搜索(动态查找)的容器,其搜索的效率与其具体的子类有关。它是一种以键值对方式存储数据的集合结构,将键映射到对象,键和对象之间有一个映射函数(散列函数),即 key -> f(x) -> value,一个key只能对应一个value。Map接口是这类集合结构的一个统一抽象,根据不同的应用场景分别有不同实现类。常用的实现类有HashMapHashtableLinkedHashMapTreeMapSortedMapCollectionSet
在这里插入图片描述

Map遍历实践

Map的遍历有很多方式,常见的也就是Map.Entry接口for循环、Map.Entry接口迭代器、增强的for循环、Java 8的Streams API。

(1)Map.Entry接口for循环

Map.Entry接口for循环这种方式需要创建Map.Entry对象,并且需要调用getKey()和getValue()方法来访问键和值。当数据量大时,对于大量的键值对,这种方式可能会稍微慢一些。
● 优点:可以同时访问键和值,并且可以方便地访问和修改它们。
● 缺点:代码略显冗长。

示例代码:

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("One", 1);
        map.put("Two", 2);
        map.put("Three", 3);

        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
        }
    }

输出结果:
在这里插入图片描述

(2)Map.Entry接口迭代器

虽然使用迭代器进行循环,但是本质还是遵循for循环,也就是方法(1)。当数据量大时,对于大量的键值对,这种方式可能会稍微慢一些。在IDE中粘贴这个代码后,IDE也是建议我们修改为方法(1)来处理。

● 优点:可以同时访问键和值,并且可以方便地访问和修改它们。
● 缺点:代码略显冗长。

示例代码:

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("One", 1);
        map.put("Two", 2);
        map.put("Three", 3);

        Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = iterator.next();
            String key = entry.getKey().toString();
            Integer value = Integer.valueOf((String) entry.getValue());
            System.out.println("Key = " + key + ", Value = " + value);
        }
    }

输出结果:
在这里插入图片描述

(3)增强的for循环

这种方式不需要创建额外的对象,并且可以直接通过键访问值,因此性能相对较高。

● 优点:简洁易读,代码量少。
● 缺点:只能按键访问值,如果需要同时访问键和值,需要使用map.get(key)方法。

示例代码:

    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("One", 1);
        map.put("Two", 2);
        map.put("Three", 3);

        for (String key : map.keySet()) {
            System.out.println("Key = " + key + ", Value = " + map.get(key));
        }
    }

输出结果:
在这里插入图片描述

(4)Java 8的Streams API

Streams API方式使用了Java 8的函数式编程特性,可以方便地进行复杂的数据处理操作。然而,它需要对数据进行多次遍历,因此在处理大量数据时可能会稍微慢一些。当数据量少时,略显臃肿;当数据量大时,性能上可能不是很好。
● 优点:可以轻松地进行复杂的数据处理和转换操作,例如过滤、映射等。
● 缺点:对于简单的遍历操作来说,代码可能略显复杂。

示例代码:

public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("One", 1);
        map.put("Two", 2);
        map.put("Three", 3);

        // 使用JDK中的流来遍历key和value
        map.entrySet().stream().forEach(
                entry -> System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue())
        );
    }

输出结果:
在这里插入图片描述

总结

本文主要给大家介绍了Java遍历Map集合的四种方式:使用for-each循环、使用迭代器、使用Lambda表达式和使用Stream API。每种方式都有其适用的场景。在实际开发中,可以根据具体情况选择不同的方式。通过本文的介绍,相信大家已经掌握了Java遍历Map集合的各种方法,并能够在实际开发中灵活运用。


欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。

文章来源:https://blog.csdn.net/L_Lycos/article/details/135832755
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。