iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java8 HashMap遍历方式性能探讨
  • 187
分享到

Java8 HashMap遍历方式性能探讨

2024-04-02 19:04:59 187人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

原因: keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从HashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都

原因:

keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从HashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是jdk8,使用Map.foreach方法。

一. keySet和entrySet


Map<String, String> map = new HashMap<String, String>();
        int num = 5000000;
        String key, value;
        // 存放500万条数据
        for (int i = 1; i <= num; i++) {
            key = "" + i;
            value = "value";
            map.put(key, value);

     }

1.1 基本用法

keySet:


Map map=new HashMap();
Iterator it=map.keySet().iterator();
Object key;
Object value;
while(it.hasNext()){
key=it.next();
value=map.get(key);
System.out.println(key+":"+value);
}

时间:只获取key 50;获取key和value 170

entrySet:


Map map=new HashMap();
Iterator it=map.entrySet().iterator();
Object key;
Object value;
while(it.hasNext()){
Map.Entry entry = (Map.Entry)it.next();
key=entry.geTKEy();
value=entry.getValue();
System.out.println(key+"="+value);
}

时间:只获取key或获取value 时间差不多 110-140;获取key和value 140

源码上看:

keySet:


final class KeyIterator extends HashIterator
        implements Iterator<K> {
        public final K next() { return nextnode().key; }
    }

entrySet:


final class EntryIterator extends HashIterator
        implements Iterator<Map.Entry<K,V>> {
        public final Map.Entry<K,V> next() { return nextNode(); }
    }

其实这里已经很明显了,当要得到某个value时,keySet还需要从HashMap中get,entrySet相比keySet少了遍历table的过程,这也是两者性能上的主要差别。


for (String key1 : map.keySet()) {
            value = map.get(key1);
}

时间:170


for (Entry<String, String> entry1 : map.entrySet()) {
	key = entry1.getKey();
	value = entry1.getValue();
}

时间:130

比较:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。

二. Map.foreach

在JDK8以后,引入了Map.foreach。

Map.foreach本质仍然是entrySet


default void forEach(BiConsumer<? super K, ? super V> action) {
        Objects.requireNonNull(action);
        for (Map.Entry<K, V> entry : entrySet()) {
            K k;
            V v;
            try {
                k = entry.getKey();
                v = entry.getValue();
            } catch(IllegalStateException ise) {
                // this usually means the entry is no longer in the map.
                throw new ConcurrentModificationException(ise);
            }
            action.accept(k, v);
        }
    }

配合lambda表达式一起使用,操作起来更加方便。

2.1 使用Java8的foreach+lambda表达式遍历Map


Map<String, Integer> items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);
 
items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));
 
items.forEach((k,v)->{
    System.out.println("Item : " + k + " Count : " + v);
    if("E".equals(k)){
        System.out.println("Hello E");
    }
});

时间:158

到此这篇关于Java8 HashMap遍历方式性能探讨的文章就介绍到这了,更多相关Java8 HashMap遍历方式性能内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java8 HashMap遍历方式性能探讨

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java8 HashMap遍历方式性能探讨
    原因: keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都...
    99+
    2024-04-02
  • java中HashMap的7种遍历方式与性能分析
    目录1、遍历方式1.1 迭代器 EntrySet1.2 迭代器 KeySet1.3 ForEach EntrySet1.4 ForEach KeySet1.5 Lambda 表达式1...
    99+
    2024-04-02
  • 浅谈HashMap中7种遍历方式的性能分析
    目录一、前言二、HashMap遍历2.1、迭代器EntrySet2.2、迭代器 KeySet2.3、ForEachEntrySet2.4、ForEach KeySet2.5、Lamb...
    99+
    2024-04-02
  • HashMap的7种遍历方式
    目录 1.JDK 8 之前的遍历1.1 EntrySet 遍历1.2 KeySet 遍历1.3 EntrySet 迭代器遍历1.4 KeySet 迭代器遍历 2.JDK 8 之后的遍历2....
    99+
    2023-09-12
    java redis 数据库
  • HashMap中有哪些遍历方式
    这篇文章主要为大家展示了“HashMap中有哪些遍历方式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HashMap中有哪些遍历方式”这篇文章吧。一、前言随着 JDK 1.8 Streams A...
    99+
    2023-06-20
  • java中HashMap的7种遍历方式与性能的示例分析
    本篇文章给大家分享的是有关java中HashMap的7种遍历方式与性能的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、遍历方式1.1 迭代器 EntrySet@Te...
    99+
    2023-06-25
  • Java8的Lambda遍历两个List匹配数据方式
    目录Lambda遍历两个List匹配数据1.定义一个静态方法2.Main方法测试3.输出结果jdk1.8的stream对两个List遍历匹配数据的处理Lambda遍历两个List匹配...
    99+
    2024-04-02
  • HashMap集合遍历的四种方式 现金盘源码出售搭建
    现金盘源码出售搭建【hubawl.com】狐霸源码论坛对于Map来说,遍历的方式都是一样的,大概都是有四种形式直接遍历返回keySet()返回Values()返回entrySet()对于第四种方式可能会除了返回的可以直接打印外,还可以通过返...
    99+
    2023-06-03
  • JS中轻松遍历对象属性的几种方式
    目录1、自身可枚举属性2、Object.values() 返回属性值3、Object.entries()4、对象属性的顺序1、自身可枚举属性 Object.keys() 方法会返回一...
    99+
    2024-04-02
  • 探讨Golang中变量赋值的原子性保障方式
    Golang中对变量赋值的原子性保障探讨 在多线程编程中,保证并发操作下变量的原子性是一个重要的问题。在Golang中,对变量赋值的原子性保障得到了很好的支持和解决。本文将探讨Golang中对变量赋值的原子性...
    99+
    2024-01-18
  • GO语言在Apache分布式系统中的性能优化策略探讨
    Apache是一个非常流行的分布式系统,它的出现使得分布式计算变得更加容易。在Apache中,运用GO语言可以提高系统的性能,但是GO语言的性能优化策略也是非常重要的。 一、GO语言在Apache中的优势 GO语言是一门非常流行的编程语言...
    99+
    2023-08-15
    分布式 apache path
  • JQuery操作与遍历元素并设置其属性、样式和内容的方法
    本文小编为大家详细介绍“JQuery操作与遍历元素并设置其属性、样式和内容的方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“JQuery操作与遍历元素并设置其属性、样式和内容的方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作