HashMap 的 7 种遍历方式与性能分析!(强烈推荐)上

简介: HashMap 的 7 种遍历方式与性能分析!(强烈推荐)

随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题。


本文先从 HashMap 的遍历方法讲起,然后再从性能、原理以及安全性等方面,来分析 HashMap 各种遍历方式的优势与不足,本文主要内容如下图所示:


image.png


HashMap 遍历


HashMap 遍历从大的方向来说,可分为以下 4 类


  1. 迭代器(Iterator)方式遍历;
  2. For Each 方式遍历;
  3. Lambda 表达式遍历(JDK 1.8+);
  4. Streams API 遍历(JDK 1.8+)。


但每种类型下又有不同的实现方式,因此具体的遍历方式又可以分为以下 7 种:


  1. 使用迭代器(Iterator)EntrySet 的方式进行遍历;
  2. 使用迭代器(Iterator)KeySet 的方式进行遍历;
  3. 使用 For Each EntrySet 的方式进行遍历;
  4. 使用 For Each KeySet 的方式进行遍历;
  5. 使用 Lambda 表达式的方式进行遍历;
  6. 使用 Streams API 单线程的方式进行遍历;
  7. 使用 Streams API 多线程的方式进行遍历。


接下来我们来看每种遍历方式的具体实现代码。


1.迭代器 EntrySet


public class HashMapTest {
    public static void main(String[] args) {
        // 创建并赋值 HashMap
        Map<Integer, String> map = new HashMap();
        map.put(1, "Java");
        map.put(2, "JDK");
        map.put(3, "Spring Framework");
        map.put(4, "MyBatis framework");
        map.put(5, "Java中文社群");
        // 遍历
        Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<Integer, String> entry = iterator.next();
            System.out.print(entry.getKey());
            System.out.print(entry.getValue());
        }
    }
}


以上程序的执行结果为:


1 Java 2 JDK 3 Spring Framework 4 MyBatis framework 5 Java中文社群


2.迭代器 KeySet


public class HashMapTest {
    public static void main(String[] args) {
        // 创建并赋值 HashMap
        Map<Integer, String> map = new HashMap();
        map.put(1, "Java");
        map.put(2, "JDK");
        map.put(3, "Spring Framework");
        map.put(4, "MyBatis framework");
        map.put(5, "Java中文社群");
        // 遍历
        Iterator<Integer> iterator = map.keySet().iterator();
        while (iterator.hasNext()) {
            Integer key = iterator.next();
            System.out.print(key);
            System.out.print(map.get(key));
        }
    }
}


以上程序的执行结果为:


1 Java 2 JDK 3 Spring Framework 4 MyBatis framework 5 Java中文社群


3.ForEach EntrySet


public class HashMapTest {
    public static void main(String[] args) {
        // 创建并赋值 HashMap
        Map<Integer, String> map = new HashMap();
        map.put(1, "Java");
        map.put(2, "JDK");
        map.put(3, "Spring Framework");
        map.put(4, "MyBatis framework");
        map.put(5, "Java中文社群");
        // 遍历
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            System.out.print(entry.getKey());
            System.out.print(entry.getValue());
        }
    }
}


以上程序的执行结果为:


1 Java 2 JDK 3 Spring Framework 4 MyBatis framework 5 Java中文社群


4.ForEach KeySet


public class HashMapTest {
    public static void main(String[] args) {
        // 创建并赋值 HashMap
        Map<Integer, String> map = new HashMap();
        map.put(1, "Java");
        map.put(2, "JDK");
        map.put(3, "Spring Framework");
        map.put(4, "MyBatis framework");
        map.put(5, "Java中文社群");
        // 遍历
        for (Integer key : map.keySet()) {
            System.out.print(key);
            System.out.print(map.get(key));
        }
    }
}


以上程序的执行结果为:


1 Java 2 JDK 3 Spring Framework 4 MyBatis framework 5 Java中文社群


5.Lambda


public class HashMapTest {
    public static void main(String[] args) {
        // 创建并赋值 HashMap
        Map<Integer, String> map = new HashMap();
        map.put(1, "Java");
        map.put(2, "JDK");
        map.put(3, "Spring Framework");
        map.put(4, "MyBatis framework");
        map.put(5, "Java中文社群");
        // 遍历
        map.forEach((key, value) -> {
            System.out.print(key);
            System.out.print(value);
        });
    }
}


以上程序的执行结果为:


1 Java 2 JDK 3 Spring Framework 4 MyBatis framework 5 Java中文社群


6.Streams API 单线程


public class HashMapTest {
    public static void main(String[] args) {
        // 创建并赋值 HashMap
        Map<Integer, String> map = new HashMap();
        map.put(1, "Java");
        map.put(2, "JDK");
        map.put(3, "Spring Framework");
        map.put(4, "MyBatis framework");
        map.put(5, "Java中文社群");
        // 遍历
        map.entrySet().stream().forEach((entry) -> {
            System.out.print(entry.getKey());
            System.out.print(entry.getValue());
        });
    }
}


以上程序的执行结果为:


1 Java 2 JDK 3 Spring Framework 4 MyBatis framework 5 Java中文社群


7.Streams API 多线程


public class HashMapTest {
    public static void main(String[] args) {
        // 创建并赋值 HashMap
        Map<Integer, String> map = new HashMap();
        map.put(1, "Java");
        map.put(2, "JDK");
        map.put(3, "Spring Framework");
        map.put(4, "MyBatis framework");
        map.put(5, "Java中文社群");
        // 遍历
        map.entrySet().parallelStream().forEach((entry) -> {
            System.out.print(entry.getKey());
            System.out.print(entry.getValue());
        });
    }
}


以上程序的执行结果为:


4 MyBatis framework 5 Java中文社群 1 Java 2 JDK 3 Spring Framework



相关文章
|
安全 测试技术 API
HashMap 的 7 种遍历方式与性能分析!「修正篇」(下)
HashMap 的 7 种遍历方式与性能分析!「修正篇」
175 1
HashMap 的 7 种遍历方式与性能分析!「修正篇」(下)
|
Oracle Java 关系型数据库
HashMap 的 7 种遍历方式与性能分析!「修正篇」(中)
HashMap 的 7 种遍历方式与性能分析!「修正篇」
144 0
HashMap 的 7 种遍历方式与性能分析!「修正篇」(中)
|
Java 数据库连接 API
HashMap 的 7 种遍历方式与性能分析!「修正篇」(上)
HashMap 的 7 种遍历方式与性能分析!「修正篇」
103 0
HashMap 的 7 种遍历方式与性能分析!「修正篇」(上)
|
安全 Java 测试技术
HashMap 的 7 种遍历方式与性能分析!(强烈推荐)下
HashMap 的 7 种遍历方式与性能分析!(强烈推荐)
164 0
HashMap 的 7 种遍历方式与性能分析!(强烈推荐)下
|
Oracle Java 关系型数据库
HashMap 的 7 种遍历方式与性能分析!(强烈推荐)中
HashMap 的 7 种遍历方式与性能分析!(强烈推荐)
175 0
HashMap 的 7 种遍历方式与性能分析!(强烈推荐)中
|
2月前
|
算法 Unix Linux
【C/C++ 实用工具】性能分析工具一览
【C/C++ 实用工具】性能分析工具一览
46 0
|
3月前
|
Rust 数据可视化 安全
Rust性能分析工具概览:perf、flamegraph 与其他
Rust作为一种高性能、内存安全的编程语言,在构建大型系统和微服务时备受青睐。然而,优化Rust程序的性能需要有效的工具。本文将对Rust中常用的性能分析工具进行介绍,包括perf、flamegraph等,并探讨它们如何帮助开发者定位和解决性能瓶颈。
|
2月前
|
数据可视化 关系型数据库 编译器
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
133 2
|
19天前
|
Web App开发 JavaScript 前端开发
JavaScript中的性能优化:代码优化技巧与性能分析工具
【4月更文挑战第22天】本文探讨JavaScript性能优化,包括代码优化技巧和性能分析工具。建议避免全局查找、减少DOM操作、使用事件委托、优化循环和异步编程以提升代码效率。推荐使用Chrome DevTools、Lighthouse和jsPerf等工具进行性能检测和优化。持续学习和实践是提升JavaScript应用性能的关键。