This method accesses the value of a Map entry, using a key that was retrieved from a keySet iterator
参考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相关推荐
- Java SE 9:不可变Map和Map.Entry的工厂方法
发表简要目录: (Post Brief Table of Content:) Introduction介绍 Java SE 8: Immutable Empty MapJava SE 8:不可变的空映 ...
- java 怎么用 string method return数量_java教程之Map应该怎么用
java教程之Map应该怎么用 在自学或者看java教程的时候,大家多多少少都存在着这样或者那样的疑惑,对于这些中软国际小编一直也在整理,今天为大家献上的是关于Map应该怎样去用的一些方法,还是跟过去 ...
- Map.entry详解
Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Va ...
- c++ map iterator 获取key_前K个高频的元素衍生之Map的Value与Key排序
前言 本篇文章总结来自九月份的每日一题 347-前K个高频的元素 思考 对于系列的题目就是计算利用到Hash表的属性的Key与Value的双属性,能够满足我们后面计算对于每一个元素出现的频率的同时还能 ...
- 判断 std map 中是否有 key
判断 std 中的 map 中是否有 key 第一种: if (m_pushMap.find("token0") != m_pushMap.end()) { } 第二种: if ( ...
- 介绍map.entry接口
Map是java中的接口,Map.Entry是Map的一个内部接口.java.util.Map.Entry接口主要就是在遍历map的时候用到. Map提供了一些常用方法,如keySet().entry ...
- Java中Map的entrySet()详解 || Map.Entry的详解
Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value Map.Entry的详解
- keySet和Map.Entry的理解
keySet方法: Map.Entry<k,v>内部接口: package com.mingyang.collector.Map;import java.util.HashMap; imp ...
- java Map及Map.Entry详解
Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet(),values()等方法. keySet()方法返回值是Map中 ...
最新文章
- SSAN 关系抽取 论文笔记
- 深入理解计算机系统:网络编程 上
- 新闻与传播c刊_新闻传播类c刊有哪些
- 字字谏言!Python入门学习教程:关于Python不得不说的事儿
- response的运行过程
- 【lucene系列学习二】Lucene实现高亮显示关键词
- Android studio之NDK integration is deprecated in the current plugin解决办法
- 这是啥?也太秀了吧?
- [单刷APUE系列]第四章——文件和目录[1]
- matlab 高级函数 —— circshift、squeeze
- 【CSP201312-3】最大的矩形,单调栈
- [NAACL18]What's Going On in Neural Constituency Parsers? An Analysis(神经成分句法分析器的一些分析)...
- 全球与中国引文管理软件市场深度研究分析报告
- 用计算机遥感技术图片,遥感图像处理
- 2021年中国鱼油发展现状及进出口状况分析:我国鱼油需求进一步扩大 [图]
- 关于C语言全局变量的定义和用法,关于C语言全局变量的定义和用法
- npm ERR code ETIMEDOUT npm ERR syscall connect npm ERR errno ETIMEDOUT npm ERR network reques...
- ps怎么更改背景图层大小_如何利用Photoshop软件修改图片尺寸的大小
- [Pyhon疫情大数据分析] 四.微博话题抓取及新冠肺炎疫情文本挖掘和情感分析
- 深入探访支付宝双11十年路,技术凿穿焦虑与想象极限 1
热门文章
- springboot+swagger 报“Whitelabel Error Page“解决
- 山东2021年高考成绩查询状元,2021年山东高考最高分多少分,历年山东高考状元
- 乘数智之风,为世界造舟筏:女性在当下如何创造?
- ios大牛李明杰亲授《从入门到精通Swift编程》限时优惠活动推出!已近600人报名直播课!
- 领域驱动设计 比较经典的书籍
- elementui动态table表格抖动,表格样式错乱
- 触宝输入法产品经理解析iOSnbsp;8…
- # js如何返回上一个页面
- OpenHarmony恢复启动子系统init进程之参数空间配置
- 业务架构·应用架构·数据架构实战~TOGAF理论全景解读