最近在看阿里巴巴最新版的Java开发手册,里面的内容还是很值得去阅读学习,下面是我对Java中Map的遍历方式的比较和总结:

第一种:使用entrySet()的形式来遍历,也是效率高,推荐使用的一种遍历map的方式:

 Map<String, String> map = new HashMap<>();map.put("x", "aaa");
map.put("y", "bbb");
for (Map.Entry<String,String> entry:map.entrySet()){System.out.println(entry.getKey()+ "---" + entry.getValue());
}

打开entrySet()的源码可以看到:

Set<Map.Entry<K, V>> entrySet();

该方法返回的是一个Set集合,集合中的类型是一个Map.Entry<K,V>类型,其中Entry<K,V>对象中保存的就是map中的键值对映射,所以,调用entrySet()方法,是直接返回一个K-V键值对,所以我们就可以直接对Map.Entry<K,V>对象调用getKey()getValue()方法来获取map中的键和对应的值。其中Entry是一个interface,属于Map接口中的,而且Entry接口有getValue(),getKey(),remove(),setValue()等方法。
优点:直接返回一个k-v对象
第二种:使用keySet()方法进行遍历,代码实现如下:

Map<String, String> map = new HashMap<>();
map.put("x", "aaa");
map.put("y", "bbb");
Iterator<String> iteratorMap =  map.keySet().iterator();
while (iteratorMap.hasNext()){System.out.println(iteratorMap.next() + "====" + map.get(iteratorMap.next()));
}

keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value
第三种:使用JDK 8中的Map.foreach()操作:

 Map<String, String> map = new HashMap<>();map.put("x", "aaa");map.put("y", "bbb");map.forEach((k,v)-> System.out.println(k + "---" +v));

在JDK 1.8中Map接口中增加了默认的实现,点击map.foreach()可以看到如下源码:

  default void forEach(BiConsumer<? super K, ? super V> action) {Objects.requireNonNull(action);for (Map.Entry<K, V> entry : entrySet()) {K k;V v;try {k = entry.getKey();v = entry.getValue();} catch(IllegalStateException ise) {// this usually means the entry is no longer in the map.throw new ConcurrentModificationException(ise);}action.accept(k, v);}}

JAVA 8的新特性就是增加了函数式编程,里面的实现还是利用entrySet()来实现map集合的遍历。

关于Java中的Map遍历方式比较相关推荐

  1. java中的Map遍历方式总结

    java中的Map遍历方式总结 import java.util.HashMap; import java.util.Iterator; import java.util.Map;public cla ...

  2. java遍历是什么意思_详解java中多种通用遍历方式

    下面小编就为大家带来一篇java集合遍历的几种方式总结及详细比较.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 集合类的通用遍历方式, 用迭代器迭代:Iterator ...

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

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

  4. JAVA中的Map集合

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

  5. Java中使用Map and Fold进行功能性编程

    在函数式编程中,Map和Fold是两个非常有用的运算符,它们属于每种函数式语言. 如果Map和Fold运算符是如此强大且必不可少,那么您如何解释说即使Java编程语言缺少这两个运算符,我们也可以使用J ...

  6. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  7. 史上最全讲解:JAVA中的Map与Thread

    史上最全讲解:JAVA中的Map与Thread 文章目录 史上最全讲解:JAVA中的Map与Thread Map HashMap TreeMap Properties Thread 开启多线程方法1 ...

  8. java map迭代_在Java中对Map进行迭代

    #概述 本文,我们将了解一下在Java中迭代Map各种不同方法. 简单来说,我们可以使用keySet().valueSet()或entrySet()来提取Map的内容.因为这些都是Sets,所以类似的 ...

  9. java 定义map_定义map%3ck_v%3e,Java中定义Map恒量,List常量

    Java中定义Map常量,List常量 一般的方式的使用静态代码块.比如: public final static Map map = new HashMap(); static { map.put( ...

最新文章

  1. 【全网之最】全网最简洁判断JavaScript中字符串是否以某一个特定字符串结尾的方法,多用于判断文件名的后缀(格式)
  2. 构建静态服务器_为静态网站构建无服务器联系表
  3. 官方iPhone SDK和开源工具链
  4. 在OpenCV下写的直方图匹配(直方图规定化)C++源码!
  5. [转] ios学习--openURL的使用方法
  6. Spring(二)——IoC
  7. php博客添加live2d,在博客中增加自己的live2d纸片人模型方法
  8. linux中ssh连接慢的一种解决方法
  9. 认知行为技术是计算机技术吗,基于认知行为模型的多Agent建模技术研究与应用_问答库...
  10. TVM:使用 Auto-scheduling 来优化算子
  11. Mybatis核心配置文件SqlMapConfig.xml
  12. 面经 |算法工程师面试题汇总分享
  13. mysql 主从复制 性能_MySQL 主从复制搭建
  14. protubuffer for windows配置指南!
  15. R语言中与矩阵相关的所有操作(上)
  16. 转速闭环直流调速系统
  17. PPT打印预览无背景
  18. android 恢复出厂设置 时间,安卓恢复出厂设置
  19. androidjni开发!应聘高级Android工程师历程感言,快来收藏!
  20. 什么是 CI/CD?(翻译)

热门文章

  1. 天下贰我的好友分享序列号,TV02--3342-1433-0242,激活后会有很多礼包奖励哦。
  2. bootstrap初试
  3. android sqlite数据库加密,(转)SQLite数据库的加密
  4. Python实现多元线性回归
  5. 腾讯QQ正式宣布:支持微信直接转账到QQ
  6. 操作无法完成。键入的打印机名不正确,或者指定的打印机没有连接到服务器上的解决办法!...
  7. JavaSE——基础知识回顾18之网络编程部分
  8. tensorflow-gpu之NVIDIA GeForce940MX显卡的坑:finished with exit code -1073740791 (0xC0000409)
  9. EXCEL数据分析(一)
  10. php 域名的正则验证