java中如何高效遍历Map集合
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集合相关推荐
- Java中四种遍历Map对象的方法
方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...
- java中两种遍历集合的方式_Java中Map集合的两种遍历方式
Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...
- Java中遍历Map集合的5种方式总结
这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 方式一 通过Map.keySet使用iterator遍历 ...
- JAVA中哈希表的使用-遍历map集合
java中哈希表的使用第二例-即将罗马数字转换为整数 代码: class Solution { public int romanToInt(String s) { HashMap<Charact ...
- Java之五种遍历Map集合的方式
摘要:在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历. 在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历.这篇文章主要给大家介 ...
- 1.6 Java遍历Map集合
Java遍历Map集合的四种方式 Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map ...
- java map foreach_java foreach遍历map集合的方法案例
java foreach遍历map集合的方法是java jdk1.8时出现的新方法,使用了Interface BiConsumer接口来实现,T代表map集合key的类型,U代表map集合Value的 ...
- 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 find 方法遍历 map 集合 | 代码示例 )
文章目录 一.使用 map 集合的 find 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 find 方法遍历 map 集合 使用 map 集合的 find 方法遍历 map 集合 ...
- 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 each 方法遍历 map 集合 | 代码示例 )
文章目录 一.使用 map 集合的 each 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 each 方法遍历 map 集合 遍历 map 集合 , 可以调用 map 集合的 eac ...
最新文章
- 值得分享!它们才是真正的宝藏网站,让人惊艳
- 密码技术--证书及go语言生成自签证书
- 【Flask】ORM高级操作之排序和分页操作
- 【面试招聘】非科班小白上岸的学习路线
- stm32f103电子钟心得体会_浅谈STM32_RTC闹钟
- Adobe Lifecycle ES的安装截图
- 获取两个数据的交集_MySQL交集和差集的实现方法
- oracle 插入含字符串
- 哪有那么多「能力问题」,在你牛到一定程度前,全是「态度问题」
- java继承矩形例子代码_Java代码实现矩形覆盖实例
- English Corpora - 英语语料库
- keil C51代码优化等级介绍
- blender做MMD心得(三)
- 监控摄像机的视频摘要(Video Summarization of Surveillance Cameras)
- 别人都不知道的“好用”网站,让你的效率飞快
- 对接丰网查询物流信息
- 树莓派4B监控CPU占用率、内存使用率、磁盘使用量以及CPU温度
- 虚拟磁盘管理器 设备未就绪_多磁盘管理,用于捕获虚拟设备和版本控制
- 第二证券|下周解禁市值超980亿元,多家机构参与解禁股评级
- #300. 【CTSC2017】吉夫特