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集合遍历相关推荐

  1. java 中map_Java Map集合详解

    Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含一个键对象和一个值对象.其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素 ...

  2. Java进阶(七)Set系列集合、Map集合体系

    七.Set系列集合.Map集合体系 需要学会什么? Set系列集合的特点:Set系列集合的特点和底层原理. 集合工具类Collections:快速的对集合进行元素的添加.排序等操作. 综合案例:把Co ...

  3. JAVA中的Map集合

    JAVA中的Map集合 1.Map简介 java.util.map接口 1.Map称为查找表,该数据结构的样子是一个"多行两列"的表格,左列为key,右列为value,Map总是根 ...

  4. java进阶开发-----Set集合、Map集合(接java集合)

    (一).Set系列集合 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素. Set集合实现类特点 Ha ...

  5. Java高级-Lambda 表达式、异常处理、集合、泛型、List集合、Map集合、Collections类

    目录 Lambda 表达式 Java Lambda 表达式的优缺点 异常处理 Exception 处理及常见异常 try catch语句 try catch finally语句 throws 声明异常 ...

  6. Java进阶,Set集合,Map集合

    Java进阶,Set集合,Map集合 一.Set系列集合 1.Set系列集系概述 Set系列集合特点 无序:存取顺序不一致 不重复:可以去除重复 无索引:没有带索引的方法,所以不能使用普通for循环遍 ...

  7. 【java笔记】map集合

    map<K,V>:将键(k)映射到值(v)的对象,通过键可以找到对应的值 Map集合的特点: 1.双列集合,一个元素包含两个值(key-Value) 2.key和value类型可以相同,也 ...

  8. Java_Collection集合与Map集合的理解与应用

    集合 概述:可以存储多个数据的容器 集合和数组的区别: 相同点:都可以存储多个数组 不同点: 数组中可以存多个数据,但是不能自由的实现数据的新增和删除操作 集合中除了可以存储多个数据,还可以自由的实现 ...

  9. 集合 (二) ----- Map集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 Map集合详解 一.Map集合基 ...

  10. Java中的Map集合遍历总结(详尽版)

    因为Map集合中的键值对排列无序,所以不能用传统的for循环来遍历,只能使用加强循环(for-each)和迭代器进行遍历. 让我们通过例子来了解Map集合的遍历: package gather; im ...

最新文章

  1. Redis 击穿、穿透、雪崩产生原因以及解决思路
  2. 盘点丨毕业年薪34万,高校人工智能研究哪家强?
  3. Ansible之使用角色一键部署httpd并检查部署结果
  4. android 如何使用服务器进行版本更新
  5. 毅航产品—模拟载板I
  6. 同一个事务里面对同一条数据做2次修改_[玩转MySQL之九]MySQL事务ACID[2-1]ACID详解...
  7. 网站用户的生命周期价值
  8. Jcreator Pro 使用技巧
  9. 词法分析之LED文件生成程序【调试中......】
  10. 《学会提问》之一——学会提出好问题
  11. 【论文解读】深度残差网络去雨模型cvpr_Removing rain from single images via a deep detail network
  12. laravel 微信支付easywechat
  13. java编写猜词游戏
  14. 2021年中国计算机视觉产业及其重点企业分析(商汤科技VS旷视科技VS依图科技VS云从科技)[图]
  15. 十一、TN 的本征自洽方法、梯度更新与任意 TN 的收缩
  16. 批量复制到花瓣网上图片素材的原图
  17. 期末ppt:week1 , 2
  18. java开发中常用的算法_总结一下项目开发过程中常用的到的一些加密算法。
  19. linux的debin版本,8个最佳的基于Debian的Linux发行版
  20. 频率域滤波matlab函数,6、频率域滤波

热门文章

  1. 个体工商户怎么开通微信支付功能及收款码?
  2. Java——Collections
  3. Windows icon缓存的清理
  4. 汽车功能安全—HARA
  5. 【数据结构】快速排序详解
  6. python中Excel表的读写改详解
  7. 绝了,SpringBoot引入 Dataway,无需开发任何代码配置一个满足需求的接口!
  8. kaggle之Dogs vs. Cats(Keras)
  9. 【GDOI2018模拟7.7】暴力大神hxx 树形dp
  10. ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理) - (转载)