遍历hashmap的三种方式_java map 遍历删除

遍历hashmap的三种方式_java map 遍历删除在Java中有多种遍历HashMap的方法,注意Java中所有的Map类型都实现了共有的Map接口,所以接下来方法适用于所有Map(如:HaspMap,TreeMap,LinkedMap,HashTable,etc)方法1使用For-Each迭代entries这是最常见的方法,并在大多数情况下更可取的。当你在循环中需要使用Map的键和值时,就可以使用这个方法Mapmap=newHashM…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在Java中有多种遍历HashMap的方法,注意Java中所有的Map类型都实现了共有的Map接口,所以接下来方法适用于所有Map(如:HaspMap,TreeMap,LinkedMap,HashTable,etc)

方法1 使用For-Each迭代entries

这是最常见的方法,并在大多数情况下更可取的。当你在循环中需要使用Map的键和值时,就可以使用这个方法

Map map = new HashMap();

for(Map.Entry entry : map.entrySet()){

System.out.println(“key = ” + entry.getKey() + “, value = ” + entry.getValue())

}

For-Each循环是Java5新引入的,所以只能在Java5以上的版本中使用。如果你遍历的map是null的话,For-Each循环会抛出NullPointerException异常,所以在遍历之前你应该判断是否为空引用。

方法2 使用For-Each迭代keys和values

如果你只需要用到map的keys或values时,你可以遍历KeySet或者values代替entrySet

Map map = new HashMap();

//iterating over keys only

for (Integer key : map.keySet()) {

System.out.println(“Key = ” + key);

}

//iterating over values only

for (Integer value : map.values()) {

System.out.println(“Value = ” + value);

}

这个方法比entrySet迭代具有轻微的性能优势(大约快10%)并且代码更简洁

方法3 使用Iterator迭代

使用泛型

Map map = new HashMap();

Iterator entries = map.entrySet().iterator();

while (entries.hasNext()) {

Map.Entry entry = (Map.Entry) entries.next();

Integer key = (Integer)entry.getKey();

Integer value = (Integer)entry.getValue();

System.out.println(“Key = ” + key + “, Value = ” + value);

}

不使用泛型

Map map = new HashMap();

Iterator> entries = map.entrySet().iterator();

while (entries.hasNext()) {

Map.Entry entry = entries.next();

System.out.println(“Key = ” + entry.getKey() + “, Value = ” + entry.getValue());

}

你可以使用同样的技术迭代keyset或者values

这个似乎有点多余但它具有自己的优势。首先,它是遍历老java版本map的唯一方法。另外一个重要的特性是可以让你在迭代的时候从map中删除entries的(通过调用iterator.remover())唯一方法.如果你试图在For-Each迭代的时候删除entries,你将会得到unpredictable resultes 异常。

从性能方法看,这个方法等价于使用For-Each迭代

方法4 迭代keys并搜索values(低效的)

Map map = new HashMap();

for (Integer key : map.keySet()) {

Integer value = map.get(key);

System.out.println(“Key = ” + key + “, Value = ” + value);

}

这个方法看上去比方法1更简洁,但是实际上它更慢更低效,通过key得到value值更耗时(这个方法在所有实现map接口的map中比方法#1慢20%-200%)。如果你安装了FindBugs,它将检测并警告你这是一个低效的迭代。这个方法应该避免

总结

如果你只需要使用key或者value使用方法2,如果你坚持使用java的老版本(java 5 以前的版本)或者打算在迭代的时候移除entries,使用方法3。其他情况请使用1方法。避免使用方法4。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195732.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java8 新特性 —— Stream 流式编程

    Java8 新特性 —— Stream 流式编程

    2020年11月19日
    168
  • 十分钟快速Maven下载和安装说明

    十分钟快速Maven下载和安装说明注意:安装Maven3之前需要安装jdk1.7以上版本,下面介绍的是最新版Maven官网下载并安装,每个人使用的编辑器不同,在这里我就不介绍了,可以去网上查对应编辑器Maven配置方法。第一步,Maven官网下载地址http://maven.apache.org/download.cgi第二步,解压文件包1.apache-maven-3.5.2-bin.zip…

    2022年5月7日
    66
  • SecureCRT中文乱码,导致上传到nginx上的文件乱码,访问报404「建议收藏」

    SecureCRT中文乱码,导致上传到nginx上的文件乱码,访问报404「建议收藏」问题背景:因使用secureCRT工具,上传文件到linux系统nginx服务上,因部分文件名包含中文,导致访问路径报错404,查看时显示乱码等问题。一般解决办法1.右键点击SecureCRT的连接标签。2.在弹出的窗口中,左边栏选择“外观”选项卡,在右边的窗口中选择UTF8,如图所示:3.此时,SecureCRT中即可正常显示中文了:此时虽然可以显示中文,但是在SecureF…

    2022年7月17日
    15
  • STM32CubeMX学习–(5)SPI读写W25Q128

    CUBE配置SPI配置引脚配置参数配置点击生成代码代码修改 uint8_tData1[4]={0x90,0x00,0x00,0x00}; uint8_tData2[2]={0x00,0x00}; uint8_tRxData[2]={0x00,0x00};/****************************/while(1){ HAL_GP…

    2022年4月13日
    199
  • python+selenium小米商城红米K40手机抢购!

    python+selenium小米商城红米K40手机抢购!使用环境1、python32、seleniumselenium使用简述1、安装seleniumpipinstallselenium12、安装ChromeDriver下载地址:http://chromedriver.storage.proxy.ustclug.org/index.html注意:下载的ChromeDriver需要与Chrome版本一致。1)Chrome版本查看:2)ChromeDriver对应版本下载:3)ChromeDriv…

    2025年6月27日
    2
  • 超分辨率重建之SRCNN整理总结

    白驹微过隙,指上细流沙。时间飞逝啊!转眼之间,四五个月过去了,伴随着中国迈进2020的新时代的元旦的步伐声,我的考研生活暂时告了一个小段落。距今的这些天,忙完了各种小事情,也是时候整理整理之前一些由于时间紧张而没有细细梳理的知识体系和小知识点了。又恰巧应CSDN上朋友的需求,今天就将之前的一些笔记和补充大致梳理一下,一来以供自己今后学习笔记,二来可以与大家共同学习参考。目录…

    2022年4月8日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号