返回顶部
首页 > 资讯 > 精选 >怎么使用HashMap的循环
  • 354
分享到

怎么使用HashMap的循环

2023-06-16 04:06:39 354人浏览 安东尼
摘要

本篇内容介绍了“怎么使用HashMap的循环”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!先来看看每种遍历的方式:在for循环中使用entr

本篇内容介绍了“怎么使用HashMap的循环”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

先来看看每种遍历的方式:

在for循环中使用entries实现Map的遍历

public static void forEachEntries() {         for (Map.Entry<String, String> entry : map.entrySet()) {             String mapKey = entry.geTKEy();             String mapValue = entry.getValue();         }     }

在for循环中遍历key

public static void forEachKey() {         for (String key : map.keySet()) {             String mapKey = key;             String mapValue = map.get(mapKey);         }     }

在for循环中遍历value

public static void forEachValues() {         for (String key : map.values()) {             String val = key;         }     }

Iterator遍历

public static void forEachIterator() {         Iterator<Entry<String, String>> entries = map.entrySet().iterator();         while (entries.hasNext()) {             Entry<String, String> entry = entries.next();             String key = entry.getKey();             String value = entry.getValue();         }     }

forEach jdk1.8遍历

public static void forEach() {         map.forEach((key, val) -> {             String key1 = key;             String value = val;         });     }

Stream jdk1.8遍历

map.entrySet().stream().forEach((entry) -> {             String key = entry.getKey();             String value = entry.getValue();         });

Streamparallel jdk1.8遍历

public static void forEachStreamparallel() {         map.entrySet().parallelStream().forEach((entry) -> {             String key = entry.getKey();             String value = entry.getValue();         });     }

以上就是常见的对于map的一些遍历的方式,下面我们来写个测试用例来看下这些遍历方式,哪些是效率最好的。下面测试用例是基于JMH来测试的  首先引入pom

<dependency>             <groupId>org.openjdk.jmh</groupId>             <artifactId>jmh-core</artifactId>             <version>1.23</version>         </dependency>         <dependency>             <groupId>org.openjdk.jmh</groupId>             <artifactId>jmh-generator-annprocess</artifactId>             <version>1.23</version>             <scope>provided</scope>         </dependency>

关于jmh测试如可能会影响结果的一些因素这里就不详细介绍了,可以参考文末的第一个链接写的非常详细。以及测试用例为什么要这么写(都是为了消除JIT对测试代码的影响)这是参照官网的链接:编写测试代码如下:

package com.workit.autoconfigure.autoconfigure.controller;   import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.Blackhole; import org.openjdk.jmh.results.fORMat.ResultFormatType; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; import org.openjdk.jmh.runner.options.OptionsBuilder;  import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.UUID; import java.util.concurrent.TimeUnit;    @State(Scope.Thread) @Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS) @Fork(1) @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.NANOSECONDS) public class InstructionsBenchmark {     public static void main(String[] args) throws RunnerException {         Options opt = new OptionsBuilder().include(InstructionsBenchmark.class.getSimpleName()).result("result.JSON").resultFormat(ResultFormatType.jsON).build();         new Runner(opt).run();     }      static final int BASE = 42;      static int add(int key,int val) {       return  BASE + key +val;     }     @Param({"1", "10", "100", "1000","10000","100000"})     int size;     private static Map<Integer, Integer>  map;      // 初始化方法,在全部Benchmark运行之前进行     @Setup(Level.Trial)     public void init() {         map = new HashMap<>(size);         for (int i = 0; i < size; i++) {             map.put(i, i);         }     }            @Benchmark     public static void forEachEntries(Blackhole blackhole) {         for (Map.Entry<Integer, Integer> entry : map.entrySet()) {             Integer mapKey = entry.getKey();             Integer mapValue = entry.getValue();             blackhole.consume(add(mapKey,mapValue));         }     }           @Benchmark     public static StringBuffer forEachKey(Blackhole blackhole) {         StringBuffer stringBuffer = new StringBuffer();         for (Integer key : map.keySet()) {           //  Integer mapValue = map.get(key);             blackhole.consume(add(key,key));         }         return stringBuffer;     }           @Benchmark     public static void forEachValues(Blackhole blackhole) {         for (Integer key : map.values()) {             blackhole.consume(add(key,key));         }     }           @Benchmark     public static void forEachIterator(Blackhole blackhole) {         Iterator<Entry<Integer, Integer>> entries = map.entrySet().iterator();         while (entries.hasNext()) {             Entry<Integer, Integer> entry = entries.next();             Integer key = entry.getKey();             Integer value = entry.getValue();             blackhole.consume(add(key,value));         }     }           @Benchmark     public static void forEachLamada(Blackhole blackhole) {         map.forEach((key, value) -> {             blackhole.consume(add(key,value));         });      }           @Benchmark     public static void forEachStream(Blackhole blackhole) {         map.entrySet().stream().forEach((entry) -> {             Integer key = entry.getKey();             Integer value = entry.getValue();             blackhole.consume(add(key,value));          });     }      @Benchmark     public static void forEachStreamparallel(Blackhole blackhole) {         map.entrySet().parallelStream().forEach((entry) -> {             Integer key = entry.getKey();             Integer value = entry.getValue();             blackhole.consume(add(key,value));          });     }  }

运行结果如下:「注:运行环境idea 2019.3,jdk1.8,windows7 64位。」

Benchmark                                    (size)  Mode  Cnt        Score        Error  Units InstructionsBenchmark.forEachEntries              1  avgt    5       10.021 &plusmn;      0.224  ns/op InstructionsBenchmark.forEachEntries             10  avgt    5       71.709 &plusmn;      2.537  ns/op InstructionsBenchmark.forEachEntries            100  avgt    5      738.873 &plusmn;     12.132  ns/op InstructionsBenchmark.forEachEntries           1000  avgt    5     7804.431 &plusmn;    136.635  ns/op InstructionsBenchmark.forEachEntries          10000  avgt    5    88540.345 &plusmn;  14915.682  ns/op InstructionsBenchmark.forEachEntries         100000  avgt    5  1083347.001 &plusmn; 136865.960  ns/op InstructionsBenchmark.forEachIterator             1  avgt    5       10.675 &plusmn;      2.532  ns/op InstructionsBenchmark.forEachIterator            10  avgt    5       73.934 &plusmn;      4.517  ns/op InstructionsBenchmark.forEachIterator           100  avgt    5      775.847 &plusmn;    198.806  ns/op InstructionsBenchmark.forEachIterator          1000  avgt    5     8905.041 &plusmn;   1294.618  ns/op InstructionsBenchmark.forEachIterator         10000  avgt    5    98686.478 &plusmn;  10944.570  ns/op InstructionsBenchmark.forEachIterator        100000  avgt    5  1045309.216 &plusmn;  36957.608  ns/op InstructionsBenchmark.forEachKey                  1  avgt    5       18.478 &plusmn;      1.344  ns/op InstructionsBenchmark.forEachKey                 10  avgt    5       76.398 &plusmn;     12.179  ns/op InstructionsBenchmark.forEachKey                100  avgt    5      768.507 &plusmn;     23.892  ns/op InstructionsBenchmark.forEachKey               1000  avgt    5    11117.896 &plusmn;   1665.021  ns/op InstructionsBenchmark.forEachKey              10000  avgt    5    84871.880 &plusmn;  12056.592  ns/op InstructionsBenchmark.forEachKey             100000  avgt    5  1114948.566 &plusmn;  65582.709  ns/op InstructionsBenchmark.forEachLamada               1  avgt    5        9.444 &plusmn;      0.607  ns/op InstructionsBenchmark.forEachLamada              10  avgt    5       76.125 &plusmn;      5.640  ns/op InstructionsBenchmark.forEachLamada             100  avgt    5      861.601 &plusmn;     98.045  ns/op InstructionsBenchmark.forEachLamada            1000  avgt    5     7769.714 &plusmn;   1663.914  ns/op InstructionsBenchmark.forEachLamada           10000  avgt    5    73250.238 &plusmn;   6032.161  ns/op InstructionsBenchmark.forEachLamada          100000  avgt    5   836781.987 &plusmn;  72125.745  ns/op InstructionsBenchmark.forEachStream               1  avgt    5       29.113 &plusmn;      3.275  ns/op InstructionsBenchmark.forEachStream              10  avgt    5      117.951 &plusmn;     13.755  ns/op InstructionsBenchmark.forEachStream             100  avgt    5     1064.767 &plusmn;     66.869  ns/op InstructionsBenchmark.forEachStream            1000  avgt    5     9969.549 &plusmn;    342.483  ns/op InstructionsBenchmark.forEachStream           10000  avgt    5    93154.061 &plusmn;   7638.122  ns/op InstructionsBenchmark.forEachStream          100000  avgt    5  1113961.590 &plusmn; 218662.668  ns/op InstructionsBenchmark.forEachStreamparallel       1  avgt    5       65.466 &plusmn;      5.519  ns/op InstructionsBenchmark.forEachStreamparallel      10  avgt    5     2298.999 &plusmn;    721.455  ns/op InstructionsBenchmark.forEachStreamparallel     100  avgt    5     8270.759 &plusmn;   1801.082  ns/op InstructionsBenchmark.forEachStreamparallel    1000  avgt    5    16049.564 &plusmn;   1972.856  ns/op InstructionsBenchmark.forEachStreamparallel   10000  avgt    5    69230.849 &plusmn;  12169.260  ns/op InstructionsBenchmark.forEachStreamparallel  100000  avgt    5   638129.559 &plusmn;  14885.962  ns/op InstructionsBenchmark.forEachValues               1  avgt    5        9.743 &plusmn;      2.770  ns/op InstructionsBenchmark.forEachValues              10  avgt    5       70.761 &plusmn;     16.574  ns/op InstructionsBenchmark.forEachValues             100  avgt    5      745.069 &plusmn;    329.548  ns/op InstructionsBenchmark.forEachValues            1000  avgt    5     7772.584 &plusmn;   1702.295  ns/op InstructionsBenchmark.forEachValues           10000  avgt    5    74063.468 &plusmn;  23752.678  ns/op InstructionsBenchmark.forEachValues          100000  avgt    5   994057.370 &plusmn; 279310.867  ns/op

我们可以发现,数据量较小的时候forEachEntries和forEachIterator、以及lamada循环效率都差不多forEachStreamarallel的效率反而较低,只有当数据量达到10000以上parallelStream的优势就体现出来了。所以平时选择使用哪种循环方式的时候没必要太纠结哪一种方式,其实每种方式之间的效率还是微乎其微的。选择适合自己的就好。

“怎么使用HashMap的循环”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么使用HashMap的循环

本文链接: https://lsjlt.com/news/282384.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用HashMap的循环
    本篇内容介绍了“怎么使用HashMap的循环”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!先来看看每种遍历的方式:在for循环中使用entr...
    99+
    2023-06-16
  • while循环怎么使用
    本篇内容主要讲解“while循环怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“while循环怎么使用”吧!while(循环终止条件){    }案例&nbs...
    99+
    2023-06-04
  • Java中的HashMap为什么会产生死循环
    目录前置知识死循环执行步骤1死循环执行步骤2死循环执行步骤3解决方案总结前言: HashMap 死循环是一个比较常见、比较经典的问题,在日常的面试中出现的频率比较高,所以接下来咱们通...
    99+
    2024-04-02
  • 怎么使用Java的For循环
    这篇文章主要介绍“怎么使用Java的For循环”,在日常操作中,相信很多人在怎么使用Java的For循环问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java的For...
    99+
    2024-04-02
  • C#的foreach循环怎么使用
    这篇文章主要介绍“C#的foreach循环怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#的foreach循环怎么使用”文章能帮助大家解决问题。使用 foreach 循...
    99+
    2023-06-17
  • Linux的loop循环怎么使用
    在Linux中,可以使用`for`循环和`while`循环来实现循环的功能。1. 使用`for`循环:```shellfor var...
    99+
    2023-09-22
    Linux
  • MySQL中怎么使用WHILE循环模拟FOR循环
    在MySQL中,没有直接的FOR循环语句,但是可以使用WHILE循环来模拟一个FOR循环。可以使用一个变量来充当计数器,然后在WHI...
    99+
    2024-04-30
    MySQL
  • Scala for循环怎么使用
    本篇内容介绍了“Scala for循环怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基本语法:变量,变量的定义:不可变:val a ...
    99+
    2023-06-02
  • Python3中的for循环怎么使用
    本篇内容介绍了“Python3中的for循环怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一·ra...
    99+
    2024-04-02
  • C语言中for循环与while循环怎么使用
    本文小编为大家详细介绍“C语言中for循环与while循环怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中for循环与while循环怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、单层f...
    99+
    2023-07-02
  • 怎么在Bash中使用循环
    这篇文章将为大家详细讲解有关怎么在Bash中使用循环,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。人们希望学习批处理命令的一个普遍原因是要得到批处理强大的功能。如果你希望批量的对文件执行一些指令,构造一个...
    99+
    2023-06-16
  • 怎么在awk中使用循环
    本篇内容介绍了“怎么在awk中使用循环”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!awk 脚本有三个主要部分:BEGIN 和 END 函数...
    99+
    2023-06-16
  • Javascript基础循环怎么使用
    这篇文章主要讲解了“Javascript基础循环怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Javascript基础循环怎么使用”吧!循环for循环是任何一门语言都会有个命令,用于...
    99+
    2023-06-22
  • java循环语句怎么使用
    这篇文章主要介绍“java循环语句怎么使用”,在日常操作中,相信很多人在java循环语句怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java循环语句怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-29
  • Shell中while循环怎么使用
    本文小编为大家详细介绍“Shell中while循环怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Shell中while循环怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。while 循环是 She...
    99+
    2023-06-27
  • while和for循环怎么使用
    本篇内容介绍了“while和for循环怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、概述Python中的循环语句有 for 和 ...
    99+
    2023-06-04
  • 怎么使用Python循环结构
    这篇文章主要介绍“怎么使用Python循环结构”,在日常操作中,相信很多人在怎么使用Python循环结构问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Python循环结构”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-01
  • es6新增循环怎么使用
    本篇内容介绍了“es6新增循环怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!es6新增循环语句有一个:“for of”循环。“for...
    99+
    2023-07-04
  • python中while循环怎么使用
    在Python中,可以使用while循环来重复执行一段代码,直到满足一定的条件为止。while循环的语法格式如下:```python...
    99+
    2023-08-25
    python while
  • oracle中while循环怎么使用
    在Oracle中,可以使用PL/SQL语言来实现循环,其中包括while循环。下面是一个示例代码,演示了如何在Oracle中使用wh...
    99+
    2024-04-22
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作