java map集合如何遍历效率高 java中Map遍历的方式
java map集合如何遍历效率高 java中Map遍历的方式
一、前言
1、在看 《阿里巴巴java开发手册》时候,有一条推荐的规约: 【推荐】使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。 说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。 ---- 那么如何理解那一段话呢? map 集合如何遍历效率高?
二、Map集合的遍历
1、根据 key 找 value
- 获取所有的 key 集合。 map.keySet()
遍历 key 集合。
根据 key 到集合中去找 value 。 map.get(key)
2、根据 key--value 键值对 找键和值
- 获取所有的 key--value键值对集合。 map.entrySet()
- 遍历键值对集合,获取每一个键值对对象。
- 根据键值对对象,获取 key 键 和 value 值。 entry.getKey(); entry.getValue();
3、遍历values 值对象: map.values();
三、代码实现
1、 遍历测试代码如下:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.junit.Test;
/**
* description: 遍历Map集合效率比较
* @version v1.0
* @author w
* @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");}}@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");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());}}}
2、运行结果:
装载map耗时: 2705 ms
foreachKeyset 遍历 map耗时: 44 ms
foreachEntry 遍历 map耗时: 22 ms
iteratorEntry 遍历 map耗时: 17 ms
1000000
四、总结
1、遍历 map 集合时,应该同时遍历出 键值对,这样效率更高。
2、若遍历过程中,需要根据条件删除集合中元素,参考:https://blog.csdn.net/HaHa_Sir/article/details/80295755
参考资料: https://blog.csdn.net/zhangsify/article/details/52966094#commentBox
java map集合如何遍历效率高 java中Map遍历的方式相关推荐
- 面试题7: 二叉树基础知识 - 前序遍历(DLR), 中序遍历(LDR), 后续遍历(LRD) - Android 端递归实现
二叉树定义: /*** Author: Heynchy* Date: 2019/6/24* <p>* Introduce: 二叉树的定义*/ public class TreeNode i ...
- Morris遍历算法 树的中序遍历
Morris遍历算法 树的中序遍历 树的中序遍历 一.普通方法 1.递归实现 2.栈实现 二.Morris遍历 1.算法 2.代码 总结 树的中序遍历 对于当前结点,先输出它的左孩子,然后输出该结点, ...
- 已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是
已知二叉树后序遍历序列是DABEC 中序遍历列是 DEBAC ,它的前序遍历序列是: ----C ---/ --E -/-\ D---B -----\ ------A 我知道答案思念是这个....我想 ...
- Java基础---集合的概述---list、set、map、泛型、collections
集合的概述 单列集合的体系: Collection 单列集合的顶层接口 List Collection的子接口,增加了一些特有的方法,有序 可以重复 有索引 ArrayList 底层采用的数组结构实现 ...
- JAVA对象集合转化为xml转换_xml转为Map集合以及对象转化为xml
1.[代码][Java]代码 package com.fang.util; import java.io.InputStream; import java.util.HashMap; import j ...
- java set遍历删除元素_java中循环遍历删除List和Set集合中元素的方法
今天在做项目时,需要删除List和Set中的某些元素,当时使用边遍历,边删除的方法,却报了以下异常: ConcurrentModificationException 为了以后不忘记,使用烂笔头把它记录 ...
- java的map键值类型是否固定_Java中Map根据键值(key)或者值(value)进行排序实现
我们都知道,java中的Map结构是key->value键值对存储的,而且根据Map的特性,同一个Map中 不存在两个Key相同的元素,而value不存在这个限制.换句话说,在同一个Map中Ke ...
- php 遍历 效率高,PHP遍历数组的三种方法及效率对比分析
这篇文章主要介绍了PHP遍历数组的三种方法及效率对比,实例分析了foreach.while与for三种遍历数组的方法与相关的效率比对,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例分析了PHP遍 ...
- Golang——map集合初始化、键值操作、map作为函数参数的使用
map是一种无序的键值对集合,键是不允许重复的,map是通过hash实现的 map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值 引用类型不能作为key map的创建: 格式1 ...
- c++ map是有序还是无序的_c++中map与unordered_map的区别
map: 优点: 有序性,这是map结构最大的优点,其元素的有序性在很多应用中都会简化很多的操作 红黑树,内部实现一个红黑书使得map的很多操作在lgn的时间复杂度下就可以实现,因此效率非常的高 缺点 ...
最新文章
- Asp.Net MVC 自定义的MVC框架(非EF操作数据库)
- NOIP2013Day1T3 表示只能过一个点
- C# 系统应用之窗体最小化至任务栏及常用操作
- 160 - 15 blaster99.exe
- 合并两个数组并去重(ES5和ES6两种方式实现)
- crossin的编程教室python入门_简单三步,用 Python 发邮件
- ssh (安全外壳协议)Secure Shell 百度百科
- c语言 callback回调函数
- zabbix详解(十三)——zabbix微信报警实战
- 【优化调度】基于matlab遗传算法求解码头泊位分配调度优化问题【含Matlab源码 247期】
- 财富自由之路-博多费舍尔
- Oracle数据库常用Sql语句大全
- 蓝屏代码0x000009f
- 9.0 OTA升级logo不更新,输入法不更新
- 一文详解基因组denovo组装原理和实战
- 计算机用户组连接打印机,工作组链接域内共享打印机的正确姿势
- AI遮天传 ML-KNN
- div背景图片完整填充样式设置---background、background-size、background-attachment
- Windows中HWND定义说明
- Win10 禁止自动更新以及禁止Windows 10升级助手(Windows 10 易升)