关于Java中的Map遍历方式比较
最近在看阿里巴巴最新版的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遍历方式比较相关推荐
- java中的Map遍历方式总结
java中的Map遍历方式总结 import java.util.HashMap; import java.util.Iterator; import java.util.Map;public cla ...
- java遍历是什么意思_详解java中多种通用遍历方式
下面小编就为大家带来一篇java集合遍历的几种方式总结及详细比较.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 集合类的通用遍历方式, 用迭代器迭代:Iterator ...
- java中两种遍历集合的方式_Java中Map集合的两种遍历方式
Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...
- JAVA中的Map集合
JAVA中的Map集合 1.Map简介 java.util.map接口 1.Map称为查找表,该数据结构的样子是一个"多行两列"的表格,左列为key,右列为value,Map总是根 ...
- Java中使用Map and Fold进行功能性编程
在函数式编程中,Map和Fold是两个非常有用的运算符,它们属于每种函数式语言. 如果Map和Fold运算符是如此强大且必不可少,那么您如何解释说即使Java编程语言缺少这两个运算符,我们也可以使用J ...
- Java中Set Map List 的区别
java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...
- 史上最全讲解:JAVA中的Map与Thread
史上最全讲解:JAVA中的Map与Thread 文章目录 史上最全讲解:JAVA中的Map与Thread Map HashMap TreeMap Properties Thread 开启多线程方法1 ...
- java map迭代_在Java中对Map进行迭代
#概述 本文,我们将了解一下在Java中迭代Map各种不同方法. 简单来说,我们可以使用keySet().valueSet()或entrySet()来提取Map的内容.因为这些都是Sets,所以类似的 ...
- java 定义map_定义map%3ck_v%3e,Java中定义Map恒量,List常量
Java中定义Map常量,List常量 一般的方式的使用静态代码块.比如: public final static Map map = new HashMap(); static { map.put( ...
最新文章
- 【全网之最】全网最简洁判断JavaScript中字符串是否以某一个特定字符串结尾的方法,多用于判断文件名的后缀(格式)
- 构建静态服务器_为静态网站构建无服务器联系表
- 官方iPhone SDK和开源工具链
- 在OpenCV下写的直方图匹配(直方图规定化)C++源码!
- [转] ios学习--openURL的使用方法
- Spring(二)——IoC
- php博客添加live2d,在博客中增加自己的live2d纸片人模型方法
- linux中ssh连接慢的一种解决方法
- 认知行为技术是计算机技术吗,基于认知行为模型的多Agent建模技术研究与应用_问答库...
- TVM:使用 Auto-scheduling 来优化算子
- Mybatis核心配置文件SqlMapConfig.xml
- 面经 |算法工程师面试题汇总分享
- mysql 主从复制 性能_MySQL 主从复制搭建
- protubuffer for windows配置指南!
- R语言中与矩阵相关的所有操作(上)
- 转速闭环直流调速系统
- PPT打印预览无背景
- android 恢复出厂设置 时间,安卓恢复出厂设置
- androidjni开发!应聘高级Android工程师历程感言,快来收藏!
- 什么是 CI/CD?(翻译)
热门文章
- 天下贰我的好友分享序列号,TV02--3342-1433-0242,激活后会有很多礼包奖励哦。
- bootstrap初试
- android sqlite数据库加密,(转)SQLite数据库的加密
- Python实现多元线性回归
- 腾讯QQ正式宣布:支持微信直接转账到QQ
- 操作无法完成。键入的打印机名不正确,或者指定的打印机没有连接到服务器上的解决办法!...
- JavaSE——基础知识回顾18之网络编程部分
- tensorflow-gpu之NVIDIA GeForce940MX显卡的坑:finished with exit code -1073740791 (0xC0000409)
- EXCEL数据分析(一)
- php 域名的正则验证