博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap遍历几种方式比较(传统的Map迭代方式对比JDK8的迭代方式)
阅读量:2388 次
发布时间:2019-05-10

本文共 4350 字,大约阅读时间需要 14 分钟。

在这里插入图片描述

HashMap 遍历从大的方向来说,可分为以下 4 类:

迭代器(Iterator)方式遍历;

For Each 方式遍历;
Lambda 表达式遍历(JDK 1.8+);
Streams API 遍历(JDK 1.8+)。
但每种类型下又有不同的实现方式,因此具体的遍历方式又可以分为以下 7 种:

使用迭代器(Iterator)EntrySet 的方式进行遍历;

使用迭代器(Iterator)KeySet 的方式进行遍历;
使用 For Each EntrySet 的方式进行遍历;
使用 For Each KeySet 的方式进行遍历;
使用 Lambda 表达式的方式进行遍历;
使用 Streams API 单线程的方式进行遍历;
使用 Streams API 多线程的方式进行遍历。

//ForEach EntrySet        for (Map.Entry
me :resultMap.entrySet()){
System.out.println("EntrySet "+me.getKey() +" = "+ me.getValue()); } //ForEach keySet for (String key : resultMap.keySet()){
System.out.println("keySet "+key +" = "+ resultMap.get(key)); } //Lambda forEach resultMap.forEach((key,value) -> { System.out.println("Lambda forEach " + key +" = "+value); }); //Streams API 单线程 resultMap.entrySet().stream().forEach((entry)->{ System.out.println("Streams API 单线程 " + entry.getKey() +" = "+entry.getValue()); }); //Streams API 多线程 resultMap.entrySet().parallelStream().forEach((entry)->{ System.out.println("Streams API 多线程 " + entry.getKey() +" = "+entry.getValue()); });
public class HashMapTest {
public static void main(String[] args) {
HashMap
map = new HashMap<>(); map.put(1, "aaa"); map.put(2, "abb"); map.put(3, "acc"); // System.out.println(map.get(1)); //方式1 键找值 Set
keySet() //1.集合 {
1=aaa, 2=abb, 3=acc} System.out.println(map); //2.通过values 获取所有值,不能获取到key对象 for (Integer i : map.keySet()) {
System.out.println(map.get(i)); } // 第一种方式: 使用keySet // 需要分别获取key和value,没有面向对象的思想 Set
ks = map.keySet(); /* Iterator
it = ks.iterator(); while (it.hasNext()) {
Integer key = it.next(); String value = map.get(key); System.out.println("key=" + key + " value=" + value); }*/ for(Integer key : ks){
String value = map.get(key); System.out.println(key+"---"+value); } System.out.println(); //方式2 键值对对象找键和值 Map.Entry对象 推荐使用 //Set
> entrySet() /* Set
> es = map.entrySet(); Iterator
> it2 = es.iterator(); while(it2.hasNext()){ // 返回的是封装了key和value对象的Map.Entry对象 Map.Entry
en = it2.next(); // 获取Map.Entry对象中封装的key和value对象 Integer key = en.getKey(); String value = en.getValue(); System.out.println("key2=" + key + " value2=" + value); }*/ //Set
> entries = map.entrySet(); Set
> set2 = map.entrySet(); for (Map.Entry
me : set2) { Integer key = me.getKey(); String value = me.getValue(); System.out.println(key + "---" + value); } }}

//方式2 键值对对象找键和值 Map.Entry对象 推荐使用

最终代码

public class HashMapTest {
public static void main(String[] args) {
HashMap
map = new HashMap<>(); map.put(1, "aaa"); map.put(2, "abb"); map.put(3, "acc"); // System.out.println(map.get(1)); //方式1 键找值 Set
keySet() //1.集合 {
1=aaa, 2=abb, 3=acc} System.out.println(map); //2.通过values 获取所有值,不能获取到key对象 for (Integer i : map.keySet()) {
System.out.println(map.get(i)); } // 第一种方式: 使用keySet // 需要分别获取key和value,没有面向对象的思想 Set
ks = map.keySet(); for (Integer key : ks) {
String value = map.get(key); System.out.println(key + "---" + value); } System.out.println(); //方式2 键值对对象找键和值 Map.Entry对象 推荐使用 //Set
> entrySet() // 返回的是封装了key和value对象的Map.Entry对象 for (Map.Entry
me : map.entrySet()) { // 获取Map.Entry对象中封装的key和value对象 Integer key = me.getKey(); String value = me.getValue(); System.out.println(key + "---" + value); } }}

传统的Map迭代方式对比JDK8的迭代方式

HashMap
map = new HashMap<>(); map.put(1, "aaa"); map.put(2, "abb"); map.put(3, "acc");// 传统的Map迭代方式 for (Map.Entry
entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue()); }// JDK8的迭代方式 map.forEach((key, value) -> {
System.out.println(key + ":" + value); });

转载地址:http://dtxab.baihongyu.com/

你可能感兴趣的文章
boost 1.39编译安装手记
查看>>
树莓派安装中文输入法
查看>>
树莓派(raspberry pi)播发flash 远程登录 视频播放
查看>>
Linux 安装与配置服务器版jre7
查看>>
Perform Two Phase Commits in MongoDB
查看>>
java.rmi.ConnectException: Connection refused to host: 127.0.0.1
查看>>
数据库服务器 Cloudscape
查看>>
JAVA中使用Schema校验XML
查看>>
使用Jakarta-ORO库的几个例子
查看>>
使用BlazeDS实现Java和Flex通信
查看>>
使用 Apache MINA 开发高性能网络应用程序
查看>>
五分钟学会使用spring-data-cassandra快速实现数据的访问
查看>>
Build self-healing distributed systems with Spring Cloud
查看>>
如何利用Spring Cloud构建起自我修复型分布式系统
查看>>
Java代码实现设置系统时间
查看>>
java -D参数简化加入多个jar
查看>>
用Erlang开发的文档数据库系统CouchDB
查看>>
Apache Commons工具集简介
查看>>
Apache Cayenne—辣椒你吃了吗?
查看>>
云应用开发工具:Spring Cloud 1.0 正式发布
查看>>