Java中Map的5种遍历方式_随笔-程序员宝宝_javamap遍历方式

技术标签: Java  遍历  Map  

在此总结一下Map的5种遍历方式:

  • 第一种方法,foreach map.keySet()
  • 第二种方法,foreach map.values()
  • 第三种方法,foreach map.entrySet()
  • 第四种方法,map.entrySet().iterator()
  • 第五种方法,map.forEach()

前两种方法分别foreach遍历Map的keySet()和values(),是最容易想出来的方法:

// 第一种方法,foreach keySet
for (Integer key : testMap.keySet()) {
    
    System.out.print(key + "-" + testMap.get(key) + "\t");
}
// 第二种方法,foreach values
for (String value : testMap.values()) {
    
    System.out.print(value + "\t");
}

第三、第四种方法使用到了Map的entrySet()进行遍历,本质是一样的(IDEA建议将第四种改为第三种):

// 第三种方法,foreach entrySet
for (Map.Entry<Integer, String> entry : testMap.entrySet()) {
    
    System.out.print(entry.getKey() + "-" + entry.getValue() + "\t");
}
// 第四种方法,entrySet iterator
Iterator<Map.Entry<Integer, String>> it = testMap.entrySet().iterator();
while (it.hasNext()) {
    
    Map.Entry<Integer, String> entry = it.next();
    System.out.print(entry.getKey() + "-" + entry.getValue() + "\t");
}

第五种则是Java8新出的一种遍历方式:

(值得注意的是,这种方法无法改变变量的值,会提示Variable used in lambda expression should be final or effectively final)

// 第五种方法,Map的forEach方法,Java8独有
testMap.forEach((key, value) -> {
    
    System.out.print(key + "-" + value + "\t");
});

最后,所有的代码如下:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapTest {
    
    public static void main(String[] args) {
    
        HashMap<Integer, String> testMap = new HashMap<>();

        testMap.put(1, "One");
        testMap.put(2, "Two");
        testMap.put(3, "Three");
        testMap.put(4, "Four");
        testMap.put(5, "Five");

        // 第一种方法,foreach keySet
        for (Integer key : testMap.keySet()) {
    
            System.out.print(key + "-" + testMap.get(key) + "\t");
        }
        System.out.println("\nforeach keySet");

        // 第二种方法,foreach values
        for (String value : testMap.values()) {
    
            System.out.print(value + "\t");
        }
        System.out.println("\nforeach values");

        // 第三种方法,foreach entrySet
        for (Map.Entry<Integer, String> entry : testMap.entrySet()) {
    
            System.out.print(entry.getKey() + "-" + entry.getValue() + "\t");
        }
        System.out.println("\nforeach entrySet");

        // 第四种方法,entrySet iterator
        Iterator<Map.Entry<Integer, String>> it = testMap.entrySet().iterator();
        while (it.hasNext()) {
    
            Map.Entry<Integer, String> entry = it.next();
            System.out.print(entry.getKey() + "-" + entry.getValue() + "\t");
        }
        System.out.println("\nentrySet iterator");

        // 第五种方法,Map的forEach方法,Java8独有
        testMap.forEach((key, value) -> {
    
            System.out.print(key + "-" + value + "\t");
        });
        System.out.println("\nMap.forEach()");
    }
}

运行结果:

1-One 2-Two 3-Three 4-Four 5-Five
foreach keySet
One Two Three Four Five
foreach values
1-One 2-Two 3-Three 4-Four 5-Five
foreach entrySet
1-One 2-Two 3-Three 4-Four 5-Five
entrySet iterator
1-One 2-Two 3-Three 4-Four 5-Five
Map.forEach()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010992313/article/details/89290924

智能推荐

chrome好用的几个插件-属于程序员的福利_做一个温柔的程序媛的博客-程序员宝宝

查看链接:http://www.jianshu.com/p/40d147ec84db?ref=myread目前我正在使用的几个插件:1、广告终结者2、ABP(也是屏蔽广告的一个插件)        3、lastPass:(这个插件是通过登录然后使用的,可以将自己的网站表单信息带入自己正在使用的电脑,非常好用)其它几个插件正在尝试。。敬请期

记一下chrome浏览器被毒霸域名劫持解决方案_归落的博客-程序员宝宝

记一下chrome浏览器被毒霸域名劫持解决方案卸载金山毒霸后,浏览器打开会跳转到毒霸页面卸载金山毒霸后,浏览器打开会跳转到毒霸页面把金山毒霸卸载之后,意外的发现自己的chrome浏览器打开的时候,跳出来的是毒霸的页面,被劫持了。按照网上在输入栏输入chrome://version/,发现命令行被重定向到毒霸页面。本来用安全卫士锁住主页,还是存在(看来腾讯还不够流氓,竟然被毒霸给上了)。按照网...

POJ1191-裸动态规划_ACM_Victoria的博客-程序员宝宝

#include #include #include using namespace std;const double INF=1000000000000.0;int n;double _x,w;double s[9][9];double f[9][9][9][9][16];int main(){ scanf("%d",&n); for (int i=0;

istio(v1.0.1)安装_jinyidong的博客-程序员宝宝

1、准备工作yelm安装2、istio安装istio安装文件下载curl -L https://git.io/getLatestIstio | sh -将istioctl加入环境变量cd istio-1.0.1export PATH=$PWD/bin:$PATHinstall custom resources definitionskubectl apply -f...

Unity WebGL打包微端时遇到的indexedDB加载问题_weixin_30429201的博客-程序员宝宝

同一个链接,在浏览器和其他人的微端里都没问题,我本地的微端执行连最开始的unity主程序加载都无法执行。在UnityLoader.js里一点一点地加输出,查了好久才找到解决办法(只是还没明白原因),问题出在indexedDB的使用方法中:try { var indexedDB = window.indexedDB || window.mozIndexedDB || wi...

Halcon 算子 elliptic_axis_必须奔跑的Zheng的博客-程序员宝宝_halcon 几何矩

作用:计算等效椭圆;参数翻译(对应以上参数顺序):输入区域、输出主半径(Ra &gt;= 0.0)、输出次半径(Rb &gt;= 0.0 &amp;&amp; Rb &lt;= Ra)、输出主半径和X轴的夹角(以弧度为单位 - pi / 2 &lt; Phi &amp;&amp; Phi &lt;= pi / 2);描述:算子elliptic_axis计算与输入区域具有相同方向和相同宽高比的椭圆的半径Ra和Rb以及方向Phi,多个输入区域可以作为数组传...

随便推点

python—异常处理_didaojiao4342的博客-程序员宝宝

Python 之-异常处理异常和错误part1:程序中难免出现错误,而错误分成两种1语法错误(这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正)#语法错误示范一、if#语法错误示范二、def test: pass#语法错误示范三、print(haha2逻辑错误(逻辑错误)#用户输入...

spring boot 自动配置_中国lanwp的博客-程序员宝宝

文章目录springboot自动化配置spring boot mybatis plus依赖spring boot自动配置相关文件启动的自动配置类MybatisPlusAutoConfigurationspringboot自动化配置这里拿mybatis-plus-boot-starter 为例子说明,其他类似spring boot mybatis plus依赖spring boot引入依赖 - 包含了mybatis和mybatis-spring 及 mybatis-plus3.3.2版本

C++中pair使用详细说明_想去的远方的博客-程序员宝宝_c++ pair

一、pair的介绍pair是一个很实用的 "小玩意",当想要将两个元素绑在一起作为一个合成元素、又不想要因此定义结构体时,使用 pair 可以很方便地作为一个代替品。也就是说,pair 实际上可以看作一个内部有两个元素的结构体,且这两个元素的类型是可以指定的,如下:struct pair{ typeName1 first; typeName2 second;};二、pair的定义要使用 pair,应先添加头文件 #include &lt;utility&gt;...

autosar can协议栈 源码解读_AUTOSAR架构的CAN通讯_他在水中央的博客-程序员宝宝

宏观地介绍可参见:autosar.org/fileadmin/A2. AUTOSAR软件分层架构AUTOSAR架构在三个软件层之间划分出最高的抽象层:应用层(Application Layer, ASW),运行时环境(Runtime Environment, RTE)和底层软件(Basic Software, BSW),三者均在微控制器上运行。这里我们主要关注的是底层软件,它进一步分层为:服务层,...

AUTOSAR之ETHSM模块(一)_Qi_Xiaoshan的博客-程序员宝宝

ETHSM模块为通信管理器提供统一的接口,用于启动和关闭以太网通信。Ethernet状态管理为COMM提供抽象接口, ETHSM也可通过ETHIF访问Ethernet硬件。

程序员大牛讲解,Python程序的执行原理!_普通网友的博客-程序员宝宝_python程序的执行原理

人工智能的火热让Python成为近两年来发展最好的开发语言,Python已经被越来越多的人所熟知,Python开发工程师水涨船高的薪资也吸引着更多的人进入这个行业。一名合格的Python工程师怎么能不知道Python运行的执行原理是什么呢?下面,就给大家讲解一下。我们都知道,使用C、C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制可执行...

推荐文章

热门文章

相关标签