map遍历方式及效率_java遍历map集合

map遍历方式及效率_java遍历map集合一、map遍历的效率先创建一个map,添加好数据:Map<String,String>map=newHashMap<>();for(inti=0;i<1000000;i++){map.put(i+"",i+"AA");}1、keySet的for循环方式://只获取keypublicstaticv…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、map遍历的效率

先创建一个map,添加好数据:

Map<String, String> map = new HashMap<>();
for (int i = 0; i < 1000000; i++) {
    map.put(i + "", i + "AA");
}

1、keySet的for循环方式:

//只获取key
public static void keySetForGetKey(Map<String, String> map){
    long startTime = System.currentTimeMillis();
    for (String key : map.keySet()) {
    }
    long endTime = System.currentTimeMillis();
    System.out.println("keySetForGetKey运行时间" + (endTime - startTime));
}
//获取key和value
public static void keySetForGetKeyAndValue(Map<String, String> map){
    long startTime = System.currentTimeMillis();
    for (String key : map.keySet()) {
        String value = map.get(key);
    }
    long endTime = System.currentTimeMillis();
    System.out.println("keySetForGetKeyAndValue运行时间" + (endTime - startTime));
}

2、keySet的iterator迭代器方式:

//只获取key
public static void keySetIteratorGetKey(Map<String, String> map){
    long startTime = System.currentTimeMillis();
    Iterator<String> iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
        String key = iterator.next();
    }
    long endTime = System.currentTimeMillis();
    System.out.println("keySetIteratorGetKey运行时间" + (endTime - startTime));
}
//获取key和value
public static void keySetIteratorGetKeyAndValue(Map<String, String> map){
    long startTime = System.currentTimeMillis();
    Iterator<String> iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
        String key = iterator.next();
        String value = map.get(iterator.next());
    }
    long endTime = System.currentTimeMillis();
    System.out.println("keySetIteratorGetKeyAndValue运行时间" + (endTime - startTime));
}

3、entrySet的for循环方式:

//只获取key
public static void entrySetForGetKey(Map<String, String> map){
    long startTime = System.currentTimeMillis();
    for (Entry<String, String> entry : map.entrySet()) {
        String key = entry.getKey();
    }
    long endTime = System.currentTimeMillis();
    System.out.println("entrySetForGetKey运行时间" + (endTime - startTime));
}
//获取key和value
public static void entrySetForGetKeyAndValue(Map<String, String> map){
    long startTime = System.currentTimeMillis();
    for (Entry<String, String> entry : map.entrySet()) {
        String key = entry.getKey();
        String value = entry.getValue();
    }
    long endTime = System.currentTimeMillis();
    System.out.println("entrySetForGetKeyAndValue运行时间" + (endTime - startTime));
}

4、entrySet的iterator迭代器方式:

//只获取key
public static void entrySetIteratorGetKey(Map<String, String> map){
    long startTime = System.currentTimeMillis();
    Iterator<Entry<String, String>> iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
        String key = iterator.next().getKey();
    }
    long endTime = System.currentTimeMillis();
    System.out.println("entrySetIteratorGetKey运行时间" + (endTime - startTime));
}
//获取key和value
public static void entrySetIteratorGetKeyAndValue(Map<String, String> map){
    long startTime = System.currentTimeMillis();
    Iterator<Entry<String, String>> iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
        String key = iterator.next().getKey();
        String value = iterator.next().getValue();
    }
    long endTime = System.currentTimeMillis();
    System.out.println("entrySetIteratorGetKeyAndValue运行时间" + (endTime - startTime));
}

最终的运行结果为:

keySetForGetKey运行时间28
keySetForGetKeyAndValue运行时间43
keySetIteratorGetKey运行时间25
keySetIteratorGetKeyAndValue运行时间36
entrySetForGetKey运行时间27
entrySetForGetKeyAndValue运行时间28
entrySetIteratorGetKey运行时间25
entrySetIteratorGetKeyAndValue运行时间29

总结:

  • entrySet的方式整体都是比keySet方式要高一些;
  • 单纯的获取key来说,两者的差别并不大,但是如果要获取value,还是entrySet的效率会更好,因为keySet需要从map中再次根据key获取value,而entrySet一次都全部获取出来;
  • iterator的迭代器方式比foreach的效率高。

二、foreach和iterator

其实foreach的语法只是对iterator进行了简单的包装,使用起来更加方便而已,但是如果在foreach循环体内,对集合元素进行删除添加操作的时候,会报出ConcurrentModificationException,并发修改异常。如果需要在遍历集合的时候对象集合中元素进行删除操作,需要使用iterator的遍历方式,iterator自带的remove删除方式不会报出异常。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191039.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月9日 上午7:22
下一篇 2026年2月9日 上午8:01


相关推荐

  • 创意无限,从这里开始🎨🎥

    创意无限,从这里开始🎨🎥

    2026年3月12日
    1
  • python 画图–简单开始及折线图[通俗易懂]

    python 画图–简单开始及折线图[通俗易懂]python画图一、环境准备      linuxubuntu下需安装下面三个包:         Numpy,Scipy,Matplotlib     分别输入下面的代码进行安装:pipinstallnumpypipinstallscipysudoapt-getinstallpython-matpl

    2022年5月29日
    38
  • 输入法个性化怎么设置_手机输入键盘怎么个性化设置

    输入法个性化怎么设置_手机输入键盘怎么个性化设置个性化设置技巧(补充输入法)子墨居士前言本次的内容大部分为推送。本打算自己推荐几款比较好用的桌面整理软件,然而最近事情越来越多,这部分的内容分享已经有很多不错的文章。就允许我偷一次懒呗(…

    2025年6月29日
    4
  • 静态路由的基本配置实验总结_三个路由器配置静态路由

    静态路由的基本配置实验总结_三个路由器配置静态路由静态路由的基本配置静态路由配置图如下PC1IP地址:192.168.1.2PC2IP地址:192.168.2.2PC3IP地址:192.168.3.2PC4IP地址:192.168.4.2R1IP地址:f1/0192.168.3.1f0/2192.168.4.1s2/01.1.1.1R2IP地址:f0/0192.168.1.1f1/0192.168.2.1s2/01.1.1.2配置好四台电脑

    2026年3月4日
    6
  • io电平转换芯片_一般plc均配置io电平转换

    io电平转换芯片_一般plc均配置io电平转换我们在使用ic2总线时,常常因为3.3v单片机与5v外围器件之间电压不匹配而需要进行电平转换,特将次转换电路记录一下,防止以后寻找时麻烦,同时此电路可以应用于大多数电平转换电路,如3.3V转12V也同样可以使用电路原理如下原理分析3.3V控制5V5V控制3.3V也可以用在3.3v单片机输出5v的TTL电平,时进行应用。可以使用BSS123代替2N7002特此记录,anlog…

    2022年8月30日
    5
  • 正规矩阵

    正规矩阵将学习以什么关于正规矩阵的基础知识理解正规矩阵定义 定义 1 矩阵 A inM n 称为是正规的 如果 AA A A 也就是 如果 A 与它的共轭转置可交换 根据定义可以得出以下结论 如果 A inM n 是正规的 且 alpha in mathbb C 显然 alphaA 是正规的 即正规矩阵

    2026年3月20日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号