参考https://www.cnblogs.com/zhangcheng1/p/11506921.html

使用findbugs出现下面的描述

This method accesses the value of a Map entry, using a key that was retrieved from a keySet iterator. It is more efficient to use an iterator on the entrySet of the map, to avoid the Map.get(key) lookup.

代码写这样就会报上面的严重问题

Map<String, Integer> params = new HashMap<String, Integer>();params.put("resultID", 1);params.put("execID", 2);params.put("num", 3);Map<String, Object> mapOut = new HashMap<String, Object>();// Map<String, Integer> 转 HashMap<String, Object>Set<String> set = params.keySet();for (String key : set) {Integer value = params.get(key);mapOut.put(key,value);}

意思是说要避免用.get(key),可能有点脱裤子放屁的感觉。

修改后

        for (Map.Entry<String, Integer> entry : params.entrySet()) {mapOut.put(entry.getKey(),entry.getValue());}

参考这篇

https://www.cnblogs.com/dreammyone/articles/9960400.html

还有这篇

https://blog.csdn.net/jdsjlzx/article/details/34487299

This method accesses the value of a Map entry, using a key that was retrieved from a keySet iterator. It is more efficient to use an iterator on the entrySet of the map, to avoid the Map.get(key) lookup.
解释:
很多人都这样遍历Map,没错,但是效率很低,先一个一个的把key遍历,然后在根据key去查找value,这不是多此一举么,为什么不遍历entry(桶)然后直接从entry得到value呢?它们的执行效率大概为1.5:1(有人实际测试过)。
我们看看HashMap.get方法的源代码:

1. public V get(Object key) {

2. if (key == null)

3. return getForNullKey();

4. int hash = hash(key.hashCode());

5. for (Entry<K,V> e = table[indexFor(hash, table.length)];

6. e != null;

7. e = e.next) {

8. Object k;

9. if (e.hash == hash && ((k = e.key) == key || key.equals(k)))

10. return e.value;

11. }

12. return null;

13. }
从这里可以看出查找value的原理,先计算出hashcode,然后散列表里取出entry,不管是计算hashcode,还是执行循环for以及执行equals方法,都是CPU密集运算,非常耗费CPU资源,如果对一个比较大的map进行遍历,会出现CPU迅速飚高的现象,直接影响机器的响应速度,在并发的情况下,简直就是一场灾难。
解决方法:

1. for (Map.Entry<String, JMenu> entry : menuList.entrySet()) {

2. mb.add(entry.getValue());
}
for(Map.Entry<String, List<BlackListDO>> tempEntiy: companyBlackItemsMap.entrySet()) {
String key = tempEntiy.getKey();
List<BlackListDO> eachCompanyBlackItems = tempEntiy.getValue();

This method accesses the value of a Map entry, using a key that was retrieved from a keySet iterator相关推荐

  1. Java SE 9:不可变Map和Map.Entry的工厂方法

    发表简要目录: (Post Brief Table of Content:) Introduction介绍 Java SE 8: Immutable Empty MapJava SE 8:不可变的空映 ...

  2. java 怎么用 string method return数量_java教程之Map应该怎么用

    java教程之Map应该怎么用 在自学或者看java教程的时候,大家多多少少都存在着这样或者那样的疑惑,对于这些中软国际小编一直也在整理,今天为大家献上的是关于Map应该怎样去用的一些方法,还是跟过去 ...

  3. Map.entry详解

    Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Va ...

  4. c++ map iterator 获取key_前K个高频的元素衍生之Map的Value与Key排序

    前言 本篇文章总结来自九月份的每日一题 347-前K个高频的元素 思考 对于系列的题目就是计算利用到Hash表的属性的Key与Value的双属性,能够满足我们后面计算对于每一个元素出现的频率的同时还能 ...

  5. 判断 std map 中是否有 key

    判断 std 中的 map 中是否有 key 第一种: if (m_pushMap.find("token0") != m_pushMap.end()) { } 第二种: if ( ...

  6. 介绍map.entry接口

    Map是java中的接口,Map.Entry是Map的一个内部接口.java.util.Map.Entry接口主要就是在遍历map的时候用到. Map提供了一些常用方法,如keySet().entry ...

  7. Java中Map的entrySet()详解 || Map.Entry的详解

    Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value Map.Entry的详解

  8. keySet和Map.Entry的理解

    keySet方法: Map.Entry<k,v>内部接口: package com.mingyang.collector.Map;import java.util.HashMap; imp ...

  9. java Map及Map.Entry详解

    Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet(),values()等方法. keySet()方法返回值是Map中 ...

最新文章

  1. SSAN 关系抽取 论文笔记
  2. 深入理解计算机系统:网络编程 上
  3. 新闻与传播c刊_新闻传播类c刊有哪些
  4. 字字谏言!Python入门学习教程:关于Python不得不说的事儿
  5. response的运行过程
  6. 【lucene系列学习二】Lucene实现高亮显示关键词
  7. Android studio之NDK integration is deprecated in the current plugin解决办法
  8. 这是啥?也太秀了吧?
  9. [单刷APUE系列]第四章——文件和目录[1]
  10. matlab 高级函数 —— circshift、squeeze
  11. 【CSP201312-3】最大的矩形,单调栈
  12. [NAACL18]What's Going On in Neural Constituency Parsers? An Analysis(神经成分句法分析器的一些分析)...
  13. 全球与中国引文管理软件市场深度研究分析报告
  14. 用计算机遥感技术图片,遥感图像处理
  15. 2021年中国鱼油发展现状及进出口状况分析:我国鱼油需求进一步扩大 [图]
  16. 关于C语言全局变量的定义和用法,关于C语言全局变量的定义和用法
  17. npm ERR code ETIMEDOUT npm ERR syscall connect npm ERR errno ETIMEDOUT npm ERR network reques...
  18. ps怎么更改背景图层大小_如何利用Photoshop软件修改图片尺寸的大小
  19. [Pyhon疫情大数据分析] 四.微博话题抓取及新冠肺炎疫情文本挖掘和情感分析
  20. 深入探访支付宝双11十年路,技术凿穿焦虑与想象极限 1

热门文章

  1. springboot+swagger 报“Whitelabel Error Page“解决
  2. 山东2021年高考成绩查询状元,2021年山东高考最高分多少分,历年山东高考状元
  3. 乘数智之风,为世界造舟筏:女性在当下如何创造?
  4. ios大牛李明杰亲授《从入门到精通Swift编程》限时优惠活动推出!已近600人报名直播课!
  5. 领域驱动设计 比较经典的书籍
  6. elementui动态table表格抖动,表格样式错乱
  7. 触宝输入法产品经理解析iOSnbsp;8…
  8. # js如何返回上一个页面
  9. OpenHarmony恢复启动子系统init进程之参数空间配置
  10. 业务架构·应用架构·数据架构实战~TOGAF理论全景解读