HashMap的7种遍历方式

这篇具有很好参考价值的文章主要介绍了HashMap的7种遍历方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.JDK 8 之前的遍历

1.1 EntrySet 遍历

    public static void main(String[] args) {
        // 创建并赋值 hashmap
        HashMap<String, String> map = new HashMap() {{
            put("Java", " Java Value");
            put("MySQL", " MySQL Value");
            put("Redis", " Redis Value");
        }};

        // 循环遍历
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }

hashmap遍历,java,java,redis,数据库

1.2 KeySet 遍历

KeySet 的遍历方式是循环 Key 内容,再通过 map.get(key) 获取 Value 的值,具体实现如下:

    public static void main(String[] args) {
        // 创建并赋值 hashmap
        HashMap<String, String> map = new HashMap() {{
            put("Java", " Java Value");
            put("MySQL", " MySQL Value");
            put("Redis", " Redis Value");
        }};

        // 循环遍历
        for (String key : map.keySet()) {
            System.out.println(key + ":" + map.get(key));
        }
    }

hashmap遍历,java,java,redis,数据库
KeySet 性能问题
通过以上代码,我们可以看出使用 KeySet 遍历,其性能是不如 EntrySet 的,因为 KeySet 其实循环了两遍集合,第一遍循环是循环 Key,而获取 Value 有需要使用 map.get(key),相当于有循环了一遍集合,所以 KeySet 循环不能建议使用,因为循环了两次,效率比较低。

1.3 EntrySet 迭代器遍历

EntrySet 和 KeySet 除了以上直接循环外,我们还可以使用它们的迭代器进行循环,如 EntrySet 的迭代器实现代码如下:

    public static void main(String[] args) {
        // 创建并赋值 hashmap
        HashMap<String, String> map = new HashMap() {{
            put("Java", " Java Value");
            put("MySQL", " MySQL Value");
            put("Redis", " Redis Value");
        }};

        // 循环遍历
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = iterator.next();
            System.out.println(entry.getKey() + ":" + entry.getValue());
        }
    }

hashmap遍历,java,java,redis,数据库

1.4 KeySet 迭代器遍历

    public static void main(String[] args) {
        // 创建并赋值 hashmap
        HashMap<String, String> map = new HashMap() {{
            put("Java", " Java Value");
            put("MySQL", " MySQL Value");
            put("Redis", " Redis Value");
        }};

        // 循环遍历
        Iterator<String> iterator = map.keySet().iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            System.out.println(key + ":" + map.get(key));
        }
    }

hashmap遍历,java,java,redis,数据库

2.JDK 8 之后的遍历

在 JDK 8 之后 HashMap 的遍历就变得方便很多了,JDK 8 中包含了以下 3 种遍历方法:
使用 Lambda 遍历
使用 Stream 单线程遍历
使用 Stream 多线程遍历

2.1 Lambda 遍历

    public static void main(String[] args) {
        // 创建并赋值 hashmap
        HashMap<String, String> map = new HashMap() {{
            put("Java", " Java Value");
            put("MySQL", " MySQL Value");
            put("Redis", " Redis Value");
        }};

        // 循环遍历
        map.forEach((key, value) -> {
            System.out.println(key + ":" + value);
        });
    }

hashmap遍历,java,java,redis,数据库

2.2 Stream 单线程遍历

Stream 遍历是先得到 map 集合的 EntrySet,然后再执行 forEach 循环,实现代码如下:

    public static void main(String[] args) {
        // 创建并赋值 hashmap
        HashMap<String, String> map = new HashMap() {{
            put("Java", " Java Value");
            put("MySQL", " MySQL Value");
            put("Redis", " Redis Value");
        }};

        // 循环遍历
        map.entrySet().stream().forEach((entry) -> {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        });
    }

hashmap遍历,java,java,redis,数据库

2.3 Stream 多线程遍历

Stream 多线程的遍历方式和上一种遍历方式类似,只是多执行了一个 parallel 并发执行的方法,此方法会根据当前的硬件配置生成对应的线程数,然后再进行遍历操作,实现代码如下:

    public static void main(String[] args) {
        // 创建并赋值 hashmap
        HashMap<String, String> map = new HashMap() {{
            put("Java", " Java Value");
            put("MySQL", " MySQL Value");
            put("Redis", " Redis Value");
        }};

        // 循环遍历
        map.entrySet().stream().parallel().forEach((entry) -> {
            System.out.println(entry.getKey() + ":" + entry.getValue());
        });
    }

3.总结

7 种 HashMap 的遍历方式,其中 JDK 8 之前主要使用 EntrySet 和 KeySet 的遍历方式,而 KeySet 的遍历方式性能比较低,一般不推荐使用。然而在 JDK 8 之后遍历方式就有了新的选择,可以使用比较简洁的 Lambda 遍历,也可以使用性能比较高的 Stream 多线程遍历。文章来源地址https://www.toymoban.com/news/detail-700562.html

到了这里,关于HashMap的7种遍历方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【java数据结构】HashMap和HashSet

    目录 一.认识哈希表: 1.1什么是哈希表? 1.2哈希表的表示:  1.3常见哈希函数:  二.认识HashMap和HashSet: 2.1关于Map.Entry的说明:, 2.2Map常用方法说明: 2.3HashMap的使用案例: 2.4Set常见方法说明:  2.5HashSet使用案例: 源码: 之前的学习中,如果我们要查找一个元素,肯定是要经

    2024年03月14日
    浏览(83)
  • 【Java 数据结构】HashMap和HashSet

    目录 1、认识 HashMap 和 HashSet 2、哈希表 2.1 什么是哈希表 2.2 哈希冲突 2.2.1 概念 2.2.2 设计合理哈希函数 - 避免冲突 2.2.3 调节负载因子 - 避免冲突 2.2.4 Java中解决哈希冲突 - 开散列/哈希桶 3、HashMap 的部分源码解读 3.1 HashMap 的构造方法 3.2 HashMap 是如何插入元素的? 3.3 哈希表

    2024年02月01日
    浏览(43)
  • java八股文面试[数据结构]——HashMap扩容优化

         知识来源: 【2023年面试】HashMap在扩容上做了哪些优化_哔哩哔哩_bilibili  

    2024年02月11日
    浏览(39)
  • Java-数据结构(二)-Map:HashMap、TreeMap、LinkedHashMap

        Map是Java中常用的数据结构,它提供了一种键值对的存储方式,可以根据键来快速访问值。在本篇文章中,我将学习Java中的Map数据结构     问题是最好的老师,我将从至少以下几个方面阐述,什么是map、使用Map有什么好处、Map的底层原理、map中的key和value分别是

    2024年02月06日
    浏览(39)
  • java数据结构(哈希表—HashMap)含LeetCode例题讲解

      目录 1、HashMap的基本方法 1.1、基础方法(增删改查) 1.2、其他方法  2、HashMap的相关例题 2.1、题目介绍 2.2、解题 2.2.1、解题思路 2.2.2、解题图解 2.3、解题代码 HashMap 是一个散列表,它存储的内容是键值(key-value)映射。 HashMap 的 key 与 value 类型可以相同也可以不同,根据定

    2024年02月05日
    浏览(52)
  • 创建HashMap三种方式

    今天看到了HashMap的一种新的创建方式,观察其底层代码后,决定将其记录,并复习了一下HashMap的相关知识。 HashMap作为一种常用的数据结构,通常情况下我们通过前两种方法对其进行创建。今天看到了第三种创建方式。 第一种 map1 的创建方式通常不做推荐,没有设置容量大

    2024年02月10日
    浏览(33)
  • Java代码优化案例2:使用HashMap代替List进行数据查找

    在开发过程中,我们经常需要在一个集合中查找某个元素。一种常见的做法是使用List来存储数据,然后通过循环遍历List来查找目标元素。然而,当数据量较大时,这种做法效率较低。我们可以通过使用HashMap来优这个过程。 1. 原始代码实现 上述代码使用List存储学生对象,然

    2024年02月11日
    浏览(40)
  • Java进阶(HashMap)——面试时HashMap常见问题解读 & 结合源码分析

    List、Set、HashMap作为Java中常用的集合,需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中HashMap集合的面试问题,结合源码分析题目背后的知识点。 关于List的博客文章如下: Java进阶(List)——面试时List常见问题解读 结合源码分析 关于的Set的博客文章如下: Jav

    2024年02月08日
    浏览(49)
  • Java 中的HashMap

    Java中的HashMap是一种常用的集合类,它实现了Map接口,并使用键值对的形式存储数据。下面展开介绍Java中的HashMap: 数据结构:HashMap内部使用了哈希表(Hash Table)数据结构来实现,它通过哈希函数将键映射到存储桶(Bucket)中,每个桶存储一个键值对。 键唯一性:HashMap中的

    2024年02月12日
    浏览(46)
  • Java HashMap

    Java中的HashMap是一种基于哈希表的数据结构,它可以存储键值对,其中键和值都可以是任意类型的对象。HashMap提供了快速的插入、删除和查找操作,具有高效的性能,因此在Java编程中非常常见。本文将介绍Java中的HashMap的详细信息。 哈希表的实现原理 HashMap是基于哈希表实现

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包