JAVA集合之Map集合遍历
Map集合比较特殊,它和Set集合一样是无序的。但是Map集合并没有实现Iterator接口,所以无法直接通过Iterator迭代器的方式来遍历Map集合。它是间接的通过Set集合的迭代器来遍历集合中的元素的。
第一种在foreach循环中通过entrySet遍历元素
Map<String,String> hashMap = new HashMap<>();for(int i = 0; i < 100000; ++i) {hashMap.put(i+"", i+"");}Long hashMapStart = System.currentTimeMillis();for(Map.Entry<String, String> entry : hashMap.entrySet()) {String key = entry.getKey();String value = entry.getValue();}Long hashMapTime = System.currentTimeMillis() - hashMapStart;System.out.println("foreach中通过entrySet遍历Map集合耗时:"+hashMapTime);
结果为
在foreach循环中通过entrySet的方式来遍历Map集合所耗费的时间不多,并且这种方式可以将Map集合中的key和value值都取出来。在大多数情况下都会采用这种办法。
第二种通过foreach循环遍历Map集合中的key或者value值
public static void main(String[] args) {Map<String, String> hashMap = new HashMap<>();for (int i = 0; i < 100000; ++i) {hashMap.put(i + "", i + "");}Long hashMapStart = System.currentTimeMillis();for (String key : hashMap.keySet()) {//do something}Long hashMapTime = System.currentTimeMillis() - hashMapStart;System.out.println("foreach中通过遍历Map集合中的key值耗时:" + hashMapTime);Long hashMapStart1 = System.currentTimeMillis();for (String value : hashMap.values()) {//do something;}Long hashMapTime1 = System.currentTimeMillis() - hashMapStart1;System.out.println("foreach中通过遍历Map集合中的value值耗时:" + hashMapTime1);}
结果为
从结果我们可以知道,通过foreach循环方式来遍历Map集中的key值或者value值比通过entrySet遍历Map集合中元素的值耗时更少。而且代码也更简洁,但是具有一定的局限性,它只能遍历元素的key或者value值,无法像entrySet的方式一样将key和value值一起全部遍历出来。在只需要遍历元素的key值或者value值时推荐使用这种方式。
第三种通过Iterator的方式遍历Map集合
public static void main(String[] args) {Map<String, String> hashMap = new HashMap<>();for (int i = 0; i < 100000; ++i) {hashMap.put(i + "", i + "");}Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();Long hashMapStart = System.currentTimeMillis();while (iterator.hasNext()) {Map.Entry<String, String> entry = iterator.next();//do something}Long hashMapTime = System.currentTimeMillis() - hashMapStart;System.out.println("通过Iterator遍历Map集合中的元素耗时:" + hashMapTime);}
结果为
从结果上我们可以知道,虽然这种方式相对来说代码不够简洁,但是通过Iterator方式来遍历Map集合和通过第二种方式来遍历key或者value值耗时很接近,并且这种方式可以同时遍历Map集合中元素的key值或者value值。
第四种通过key值取得vaule值
public static void main(String[] args) {Map<String, String> hashMap = new HashMap<>();for (int i = 0; i < 100000; ++i) {hashMap.put(i + "", i + "");}Long hashMapStart = System.currentTimeMillis();for(String key : hashMap.keySet()) {String vaule = hashMap.get(key);//do something}Long hashMapTime = System.currentTimeMillis() - hashMapStart;System.out.println("通过key取得Map集合中元素的value值耗时:" + hashMapTime);}
结果为
通过这种方式来取得Map集合中元素的value值虽然代码看起来很简洁,但是却是耗时最多的。因为通过key值来从集合中取得value值是一个很耗时的操作,所以这种方式也不推荐使用。
说在最后
本次的遍历都是在10万条数据下,因此具有一定的局限性仅仅作为一个参考。还希望大家可以自己动手多去尝试,如果有什么不正之处还望指教。
其他集合的遍历可以参考我的其他文章
JAVA集合之List集合遍历
JAVA集合之Set集合遍历
JAVA集合之Map集合遍历相关推荐
- java 中map_Java Map集合详解
Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象.其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素 ...
- Java进阶(七)Set系列集合、Map集合体系
七.Set系列集合.Map集合体系 需要学会什么? Set系列集合的特点:Set系列集合的特点和底层原理. 集合工具类Collections:快速的对集合进行元素的添加.排序等操作. 综合案例:把Co ...
- JAVA中的Map集合
JAVA中的Map集合 1.Map简介 java.util.map接口 1.Map称为查找表,该数据结构的样子是一个"多行两列"的表格,左列为key,右列为value,Map总是根 ...
- java进阶开发-----Set集合、Map集合(接java集合)
(一).Set系列集合 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素. Set集合实现类特点 Ha ...
- Java高级-Lambda 表达式、异常处理、集合、泛型、List集合、Map集合、Collections类
目录 Lambda 表达式 Java Lambda 表达式的优缺点 异常处理 Exception 处理及常见异常 try catch语句 try catch finally语句 throws 声明异常 ...
- Java进阶,Set集合,Map集合
Java进阶,Set集合,Map集合 一.Set系列集合 1.Set系列集系概述 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍 ...
- 【java笔记】map集合
map<K,V>:将键(k)映射到值(v)的对象,通过键可以找到对应的值 Map集合的特点: 1.双列集合,一个元素包含两个值(key-Value) 2.key和value类型可以相同,也 ...
- Java_Collection集合与Map集合的理解与应用
集合 概述:可以存储多个数据的容器 集合和数组的区别: 相同点:都可以存储多个数组 不同点: 数组中可以存多个数据,但是不能自由的实现数据的新增和删除操作 集合中除了可以存储多个数据,还可以自由的实现 ...
- 集合 (二) ----- Map集合详解
相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 Map集合详解 一.Map集合基 ...
- Java中的Map集合遍历总结(详尽版)
因为Map集合中的键值对排列无序,所以不能用传统的for循环来遍历,只能使用加强循环(for-each)和迭代器进行遍历. 让我们通过例子来了解Map集合的遍历: package gather; im ...
最新文章
- Redis 击穿、穿透、雪崩产生原因以及解决思路
- 盘点丨毕业年薪34万,高校人工智能研究哪家强?
- Ansible之使用角色一键部署httpd并检查部署结果
- android 如何使用服务器进行版本更新
- 毅航产品—模拟载板I
- 同一个事务里面对同一条数据做2次修改_[玩转MySQL之九]MySQL事务ACID[2-1]ACID详解...
- 网站用户的生命周期价值
- Jcreator Pro 使用技巧
- 词法分析之LED文件生成程序【调试中......】
- 《学会提问》之一——学会提出好问题
- 【论文解读】深度残差网络去雨模型cvpr_Removing rain from single images via a deep detail network
- laravel 微信支付easywechat
- java编写猜词游戏
- 2021年中国计算机视觉产业及其重点企业分析(商汤科技VS旷视科技VS依图科技VS云从科技)[图]
- 十一、TN 的本征自洽方法、梯度更新与任意 TN 的收缩
- 批量复制到花瓣网上图片素材的原图
- 期末ppt:week1 , 2
- java开发中常用的算法_总结一下项目开发过程中常用的到的一些加密算法。
- linux的debin版本,8个最佳的基于Debian的Linux发行版
- 频率域滤波matlab函数,6、频率域滤波