方法1:使用For-Each迭代entries

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

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Map.Entry<Integer, Integer> 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<Integer, Integer> map = new HashMap<Integer, Integer>();//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<Integer, Integer> map = new HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {Map.Entry<Integer, Integer> entry = entries.next();System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}

不使用泛型

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);
}

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

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

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

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

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
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,它将检测并警告你这是一个低效的迭代。这个方法应该避免

代码演示:

package com.gcc.interview;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/*** HashMap 不同遍历方法比较* @author gcc** 2018年1月22日*/
public class TestHashMap {public static void main(String[] args) {Map<Integer,String> map =new HashMap<Integer,String>();map.put(1, "xiao");map.put(2, "chao");map.put(3, "shang");map.put(4, "xue");//方法一for(Map.Entry<Integer,String> entry : map.entrySet()) {System.out.println("方法一:key ="+entry.getKey()+"---value="+entry.getValue());}//方法二for(Integer key:map.keySet()) {System.out.println("方法二:key = "+key);}for(String value:map.values()) {System.out.println("方法二:value = "+value);}//方法三Iterator<Map.Entry<Integer,String>> entries = map.entrySet().iterator();while(entries.hasNext()) {Map.Entry<Integer,String> entry = entries.next();System.out.println("方法三:key = "+entry.getKey()+"--value="+entry.getValue());}//方法四for(Integer key:map.keySet()) {String value = map.get(key);System.out.println("方法四:Key = " + key + ", Value = " + value);}}}
可以根据不同需求选择不同遍历方法,但一般选择第一种方法就可以。

作者:scgyus

转载请注明出处:http://blog.csdn.net/scgyus/

HashMap遍历的四种方法相关推荐

  1. 二叉树后序遍历的四种方法

    在二叉树三种顺序的遍历中,后序遍历相对较麻烦一些,其实对于递归方法来说,三种方法大同小异,思路与实现都很简单.后序遍历的迭代法与Morris方法比较麻烦.这里介绍后序遍历的四种方法,其实还是递归.迭代 ...

  2. HashMap遍历的四种常用方式

    古人云:温故而知新. 最近闲来无事就去翻阅了一下之前的一些基础java知识点.本想着随便看看,然而就发现有了意外收获.比如本文所讲HashMap遍历的四种常用方式. 大伙们一起学习一起进步,记得点赞关 ...

  3. python dict遍历文件_python 字典(dict)遍历的四种方法性能测试报告

    python中,遍历dict的方法有四种.但这四种遍历的性能如何呢?我做了如下的测试 l = [(x,x) for x in xrange(10000)]d = dict(l)from time im ...

  4. python dict遍历_python 字典(dict)遍历的四种方法性能测试报告

    python中,遍历dict的方法有四种.但这四种遍历的性能如何呢?我做了如下的测试 l = [(x,x) for x in xrange(10000)] d = dict(l) from time ...

  5. python dict遍历性能_python 字典(dict)遍历的四种方法性能测试报告

    python中,遍历dict的方法有四种.但这四种遍历的性能如何呢?我做了如下的测试 l = [(x,x) for x in xrange(10000)] d = dict(l) from time ...

  6. JAVA遍历list四种方法及其效率比较

    四种主要方法有: foreach for(Object ob : list){ } Iterator Iterator it = list.iterator(); while(it.hasNext() ...

  7. Map遍历的四种方法效率对比

    最近在面试的时候笔试碰到一道关于map的题,请手写出map遍历效率最高的方法. 关于map遍历的方式相信大家都知道,但是各个方法的一个效率高低可能有些人平常没有注意,所以在这做了一个简单的测试. pu ...

  8. java中Map遍历的四种方法

    在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方式去遍历. 方法一:在for循环 ...

  9. HashMap遍历的五种方法

    在本文中,我们将通过示例讨论在 Java 上遍历 HashMap 的五种最佳方法. 1.使用 Iterator 遍历 HashMap EntrySet 2.使用 Iterator 遍历 HashMap ...

最新文章

  1. CTO案头必备|AI技术产业落地的42章经
  2. 第十七章 扩展Python
  3. ASP.NET MVC下的四种验证编程方式[续篇]
  4. 多类目MoE模型在京东电商搜索中的应用
  5. 华为暂没有推出鸿蒙手机计划;苹果否认 iPhone 辐射超标;Kotlin 1.3.50 发布 | 极客头条...
  6. 知己知彼-关于Oracle安全比特币勒索问题揭秘和防范
  7. ubuntu 18下安装vscode教程两种方法总计
  8. 【图频处理】基于matlab GUI界面环图像处理与音乐播放系统【含Matlab源码 185期】
  9. 谷歌浏览器实现按下按键的脚本_谷歌浏览器辅助工具v1.4.5
  10. linux开发板增加adb功能
  11. 【IT生活】成长,没有想象的那么迫切 ——叶绍琛
  12. iptv服务器制作 php,DIY点播服务器
  13. 2018服务商口碑榜Top50(4月)重磅出炉
  14. pxe kickstart无人值守自动化装机
  15. JavaScript使用手册
  16. prettier工具格式化
  17. 揭秘工业互联网的内涵、热点与难点!
  18. 黑苹果11.0big sur驱动因特尔英特尔intel82599万兆网卡教程
  19. 小布助手在面向中文短文本的实体链指比赛中的实践应用
  20. Linux学习笔记——系统函数IO

热门文章

  1. 华为鸿蒙开启王者荣耀,王者荣耀猪队友,游戏更新曝光华为新平板,直接搭载鸿蒙2.0?...
  2. torch中datasets.load_dataset用法
  3. Excel2000/XP和PowerPoint2000/XP下内部COM插件的实现
  4. 校园招聘-微众银行面试经历
  5. 图像处理库GPUImage简单使用
  6. 在WIN7下安装Microsoft Virtual Server 2005 R2的方法
  7. 串口通讯(USART)
  8. 【dubbo】dubbo服务注册三种方式
  9. MySQL存储引擎的区别与比较
  10. 禁用计算机账户密码更改,禁用计算机帐户密码更改 - Windows Server | Microsoft Docs...