前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础学习|遍历Map方法与思考

Java基础学习|遍历Map方法与思考

原创
作者头像
Aion
发布2024-01-24 21:27:59
1873
发布2024-01-24 21:27:59
举报

基础性的东西很多,需要我们使用美的眼睛去发现、去实践,然后转化为自己的知识。

前言

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()方法来访问键和值。当数据量大时,对于大量的键值对,这种方式可能会稍微慢一些。

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

示例代码:

代码语言:javascript
复制
    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)来处理。

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

示例代码:

代码语言:javascript
复制
    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();
            String value = entry.getValue().toString();
            System.out.println("Key = " + key + ", Value = " + value);
        }
    }

输出结果:

(3)增强的for循环

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

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

示例代码:

代码语言:javascript
复制
    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的函数式编程特性,可以方便地进行复杂的数据处理操作。然而,它需要对数据进行多次遍历,因此在处理大量数据时可能会稍微慢一些。当数据量少时,略显臃肿;当数据量大时,性能上可能不是很好。

  • 优点:可以轻松地进行复杂的数据处理和转换操作,例如过滤、映射等。
  • 缺点:对于简单的遍历操作来说,代码可能略显复杂。

示例代码:

代码语言:javascript
复制
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集合的各种方法,并能够在实际开发中灵活运用。


我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 什么是Map
  • Map遍历实践
    • (1)Map.Entry接口for循环
      • (2)Map.Entry接口迭代器
        • (3)增强的for循环
          • (4)Java 8的Streams API
          • 总结
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com