HashMap遍历的四种方法
方法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遍历的四种方法相关推荐
- 二叉树后序遍历的四种方法
在二叉树三种顺序的遍历中,后序遍历相对较麻烦一些,其实对于递归方法来说,三种方法大同小异,思路与实现都很简单.后序遍历的迭代法与Morris方法比较麻烦.这里介绍后序遍历的四种方法,其实还是递归.迭代 ...
- HashMap遍历的四种常用方式
古人云:温故而知新. 最近闲来无事就去翻阅了一下之前的一些基础java知识点.本想着随便看看,然而就发现有了意外收获.比如本文所讲HashMap遍历的四种常用方式. 大伙们一起学习一起进步,记得点赞关 ...
- python dict遍历文件_python 字典(dict)遍历的四种方法性能测试报告
python中,遍历dict的方法有四种.但这四种遍历的性能如何呢?我做了如下的测试 l = [(x,x) for x in xrange(10000)]d = dict(l)from time im ...
- python dict遍历_python 字典(dict)遍历的四种方法性能测试报告
python中,遍历dict的方法有四种.但这四种遍历的性能如何呢?我做了如下的测试 l = [(x,x) for x in xrange(10000)] d = dict(l) from time ...
- python dict遍历性能_python 字典(dict)遍历的四种方法性能测试报告
python中,遍历dict的方法有四种.但这四种遍历的性能如何呢?我做了如下的测试 l = [(x,x) for x in xrange(10000)] d = dict(l) from time ...
- JAVA遍历list四种方法及其效率比较
四种主要方法有: foreach for(Object ob : list){ } Iterator Iterator it = list.iterator(); while(it.hasNext() ...
- Map遍历的四种方法效率对比
最近在面试的时候笔试碰到一道关于map的题,请手写出map遍历效率最高的方法. 关于map遍历的方式相信大家都知道,但是各个方法的一个效率高低可能有些人平常没有注意,所以在这做了一个简单的测试. pu ...
- java中Map遍历的四种方法
在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方式去遍历. 方法一:在for循环 ...
- HashMap遍历的五种方法
在本文中,我们将通过示例讨论在 Java 上遍历 HashMap 的五种最佳方法. 1.使用 Iterator 遍历 HashMap EntrySet 2.使用 Iterator 遍历 HashMap ...
最新文章
- CTO案头必备|AI技术产业落地的42章经
- 第十七章 扩展Python
- ASP.NET MVC下的四种验证编程方式[续篇]
- 多类目MoE模型在京东电商搜索中的应用
- 华为暂没有推出鸿蒙手机计划;苹果否认 iPhone 辐射超标;Kotlin 1.3.50 发布 | 极客头条...
- 知己知彼-关于Oracle安全比特币勒索问题揭秘和防范
- ubuntu 18下安装vscode教程两种方法总计
- 【图频处理】基于matlab GUI界面环图像处理与音乐播放系统【含Matlab源码 185期】
- 谷歌浏览器实现按下按键的脚本_谷歌浏览器辅助工具v1.4.5
- linux开发板增加adb功能
- 【IT生活】成长,没有想象的那么迫切 ——叶绍琛
- iptv服务器制作 php,DIY点播服务器
- 2018服务商口碑榜Top50(4月)重磅出炉
- pxe kickstart无人值守自动化装机
- JavaScript使用手册
- prettier工具格式化
- 揭秘工业互联网的内涵、热点与难点!
- 黑苹果11.0big sur驱动因特尔英特尔intel82599万兆网卡教程
- 小布助手在面向中文短文本的实体链指比赛中的实践应用
- Linux学习笔记——系统函数IO
热门文章
- 华为鸿蒙开启王者荣耀,王者荣耀猪队友,游戏更新曝光华为新平板,直接搭载鸿蒙2.0?...
- torch中datasets.load_dataset用法
- Excel2000/XP和PowerPoint2000/XP下内部COM插件的实现
- 校园招聘-微众银行面试经历
- 图像处理库GPUImage简单使用
- 在WIN7下安装Microsoft Virtual Server 2005 R2的方法
- 串口通讯(USART)
- 【dubbo】dubbo服务注册三种方式
- MySQL存储引擎的区别与比较
- 禁用计算机账户密码更改,禁用计算机帐户密码更改 - Windows Server | Microsoft Docs...