遍历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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • rcnn算法原理_十大算法R实现

    rcnn算法原理_十大算法R实现R-CNN算法原理对于一张图片当中多个目标,多个类别的时候。前面的输出结果是不定的,有可能是以下有四个类别输出这种情况。或者N个结果,这样的话,网络模型输出结构不定所以需要一些他的方法解决目标检测(多个目标)的问题,试图将一个检测问题简化成分类问题①:目标检测-Overfeat模型滑动窗口目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。为了在不同观察距离处检测…

    2022年9月8日
    2
  • Linux系统时间和硬件时间设置[通俗易懂]

    Linux系统时间和硬件时间设置[通俗易懂]Linux系统时间和硬件时间设置

    2022年4月24日
    52
  • @RequestBody的使用[通俗易懂]

    @RequestBody的使用[通俗易懂]提示:建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基本知识常识,可选择性跳过。声明:本文是基于SpringBoot,进行的演示说明。基础知识介绍:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBo…

    2022年4月27日
    74
  • 开发发版流程_文件签发流程

    开发发版流程_文件签发流程迭代流程开发人员:周一到周五产品设计:周一到周五测试人员:周六收集需求:周一周二周三周四需求梳理周五用户意见周六第二次需求梳理需求阶段第一次需求梳理会议开发人员和测试人员通过此会议了解下一次迭代

    2022年8月5日
    5
  • PHP安装curl扩展

    昨天在写文章的时候,突然出现了一个很顽皮的bug。一直跳到404页面???于是我赶紧打开debug,看看什么情况!弹出的错误是:CalltoundefinedfunctionHome\Controller\curl_init()原来是curl扩展没有装……(ps:之前写文章的时候都没出现过这个情况,很顽皮~)来记录一下安装过程吧:…

    2022年4月5日
    53
  • 运算放大器11种经典电路

    运算放大器11种经典电路运算放大器11种经典电路

    2022年6月11日
    38

发表回复

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

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