1. 前言

【推荐】使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。 说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。

2.map集合遍历的几种方式

foreachKeyset 遍历

//根据 key 找 value
for (Integer key : map.keySet()) {String value = map.get(key);// System.out.println("foreachKeyset : key :" + key + "---> value :"+ value);
}
foreachEntry遍历
//根据 key--value 键值对 找键和值 ( foreach 遍历)
for (Entry<Integer, String> entry : map.entrySet()) {// System.out.println("foreachEntry : key :" + entry.getKey() + "---> value :"+entry.getValue());}
iteratorEntry遍历
//根据 key--value 键值对 找键和值 ( iterator 遍历)
Iterator<Entry<Integer, String>> iterator = map.entrySet().iterator();while (iterator.hasNext()) {Entry<Integer, String> entry = iterator.next();//System.out.println("iteratorEntry : key :" + entry.getKey() + "---> value :"+entry.getValue());}
lambadaEntry遍历
//基于JDK1.8版本以上 lambada函数
map.forEach((k, v) -> {System.out.println("key:"+k+"values:"+v);});

mapValues遍历

//只能取到values
for(Object m:map.values()){
System.out.println(m);
}

测试实例:

package com.xiaoxit.erp.core.controller.exe;/*** @version 1.0* @ClassName s* @Description* @Author wuronghua* @Date 2019/11/6 16:22*/import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;import org.junit.Test;/*** description: 遍历Map集合效率比较** @author w* @version v1.0* @date 2018年10月23日上午11:20:08*/
public class ForeachMap {/*** description: 初始化map集合中元素** @param map* @version v1.0* @author w* @date 2018年10月23日 下午2:45:35*/public void init(Map<Integer, String> map) {// 初始化map集合中元素的个数int count = 1000000;for (int i = 1; i <= count; i++) {map.put(i, i + " ---> map");}}/*** 在只需要values时,for (Object m : map.values()) 最快* 同时需要key,values时,iterator 最快*/@Testpublic void test() {Map<Integer, String> map = new HashMap<>();Map<Integer, String> map2 = new HashMap<>();long start = System.currentTimeMillis();init(map);init(map2);System.out.println("装载map耗时: " + (System.currentTimeMillis() - start) + " ms");start = System.currentTimeMillis();foreachKeyset(map);System.out.println("foreachKeyset 遍历 map耗时: " + (System.currentTimeMillis() - start) + " ms");start = System.currentTimeMillis();foreachEntry(map2);System.out.println("foreachEntry 遍历 map耗时: " + (System.currentTimeMillis() - start) + " ms");start = System.currentTimeMillis();iteratorEntry(map2);System.out.println("iteratorEntry 遍历 map耗时: " + (System.currentTimeMillis() - start) + " ms");start = System.currentTimeMillis();lambadaEntry(map2);System.out.println("lambadaEntry 遍历 map耗时: " + (System.currentTimeMillis() - start) + " ms");start = System.currentTimeMillis();mapValuesEntry(map2);System.out.println("mapValuesEntry 遍历 map耗时: " + (System.currentTimeMillis() - start) + " ms");System.out.println(map.size());}/*** description: 根据 key 找 value** @param map* @version v1.0* @author w* @date 2018年10月23日 下午5:10:01*/private void foreachKeyset(Map<Integer, String> map) {for (Integer key : map.keySet()) {String value = map.get(key);// System.out.println("foreachKeyset : key :" + key + "---> value :"+ value);}}/*** description: 根据 key--value 键值对 找键和值 ( foreach 遍历)** @param map* @version v1.0* @author w* @date 2018年10月23日 下午5:19:31*/private void foreachEntry(Map<Integer, String> map) {for (Entry<Integer, String> entry : map.entrySet()) {// System.out.println("foreachEntry : key :" + entry.getKey() + "---> value :"+entry.getValue());}}/*** description: 根据 key--value 键值对 找键和值 ( iterator 遍历)** @param map* @version v1.0* @author w* @date 2018年10月23日 下午5:19:01*/private void iteratorEntry(Map<Integer, String> map) {Iterator<Entry<Integer, String>> iterator = map.entrySet().iterator();while (iterator.hasNext()) {Entry<Integer, String> entry = iterator.next();//System.out.println("iteratorEntry : key :" + entry.getKey() + "---> value :"+entry.getValue());}}/**/private void lambadaEntry(Map<Integer, String> map) {map.forEach((k, v) -> {System.out.println("key:"+k+"values:"+v);});}/** 通过Map.values()遍历所有的value,但不能遍历key*/private void mapValuesEntry(Map<Integer, String> map) {for (Object m : map.values()) {}}}

装载map耗时: 4119 ms
foreachKeyset 遍历 map耗时: 41 ms
foreachEntry 遍历 map耗时: 27 ms
iteratorEntry 遍历 map耗时: 25 ms
lambadaEntry 遍历 map耗时: 96 ms
mapValuesEntry 遍历 map耗时: 30 ms
1000000

java中如何高效遍历Map集合相关推荐

  1. Java中四种遍历Map对象的方法

    方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...

  2. java中两种遍历集合的方式_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

  3. Java中遍历Map集合的5种方式总结

    这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 方式一 通过Map.keySet使用iterator遍历 ...

  4. JAVA中哈希表的使用-遍历map集合

    java中哈希表的使用第二例-即将罗马数字转换为整数 代码: class Solution { public int romanToInt(String s) { HashMap<Charact ...

  5. Java之五种遍历Map集合的方式

    摘要:在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历. 在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历.这篇文章主要给大家介 ...

  6. 1.6 Java遍历Map集合

    Java遍历Map集合的四种方式 Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map ...

  7. java map foreach_java foreach遍历map集合的方法案例

    java foreach遍历map集合的方法是java jdk1.8时出现的新方法,使用了Interface BiConsumer接口来实现,T代表map集合key的类型,U代表map集合Value的 ...

  8. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 find 方法遍历 map 集合 | 代码示例 )

    文章目录 一.使用 map 集合的 find 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 find 方法遍历 map 集合 使用 map 集合的 find 方法遍历 map 集合 ...

  9. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 each 方法遍历 map 集合 | 代码示例 )

    文章目录 一.使用 map 集合的 each 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 each 方法遍历 map 集合 遍历 map 集合 , 可以调用 map 集合的 eac ...

最新文章

  1. 值得分享!它们才是真正的宝藏网站,让人惊艳
  2. 密码技术--证书及go语言生成自签证书
  3. 【Flask】ORM高级操作之排序和分页操作
  4. 【面试招聘】非科班小白上岸的学习路线
  5. stm32f103电子钟心得体会_浅谈STM32_RTC闹钟
  6. Adobe Lifecycle ES的安装截图
  7. 获取两个数据的交集_MySQL交集和差集的实现方法
  8. oracle 插入含字符串
  9. 哪有那么多「能力问题」,在你牛到一定程度前,全是「态度问题」
  10. java继承矩形例子代码_Java代码实现矩形覆盖实例
  11. English Corpora - 英语语料库
  12. keil C51代码优化等级介绍
  13. blender做MMD心得(三)
  14. 监控摄像机的视频摘要(Video Summarization of Surveillance Cameras)
  15. 别人都不知道的“好用”网站,让你的效率飞快
  16. 对接丰网查询物流信息
  17. 树莓派4B监控CPU占用率、内存使用率、磁盘使用量以及CPU温度
  18. 虚拟磁盘管理器 设备未就绪_多磁盘管理,用于捕获虚拟设备和版本控制
  19. 第二证券|下周解禁市值超980亿元,多家机构参与解禁股评级
  20. #300. 【CTSC2017】吉夫特

热门文章

  1. 【Windows临时文件】临时文件的存放位置
  2. 关于团队的一些思考,玩WOW时候的思考
  3. 关于爬虫使用的注意事项
  4. R语言笔记6:在R中写一些简单的函数
  5. 难得的休闲。(updating)
  6. 什么款式蓝牙耳机适合学生党?百元级优质高性价比蓝牙耳机推荐
  7. 移动c:\windows\installer文件夹
  8. 如何从0到1做一条云计算的新产品线?
  9. 企业开发六大系统--MIS/MRP/ERP/OA/BPM/CMS
  10. 分析appstore审核失败的真实案例及解决办法