java hashmap 遍历 for_Java中HashMap遍历
在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。
java hashmap 遍历 for_Java中HashMap遍历相关推荐
- java根据前序和中序建树_Java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)...
Java实现根据前序遍历构建二叉树(前序遍历.中序遍历.后序遍历),Java关于ACM的代码真的好少,想参考如何用java实现二叉树googl 前言 Java关于ACM的代码真的好少,想参考如何用ja ...
- Java实现前序遍历,中序遍历,后序遍历,层序遍历
1.遍历思想 前序遍历首先访问根节点,然后访问左子树,最后访问右子树. 中序遍历先访问左子树,然后访问根节点,最后访问右子树. 后续遍历先访问左子树,然后访问右子树,最后访问根节点. 层序遍历则是从上 ...
- 用Java实现二叉树前序遍历、中序遍历和后序遍历。
用Java实现二叉树前序遍历.中序遍历和后序遍历. 解析: public class Tree {private int data; /* 数据节点 */private Tree left; /* 左 ...
- 根据前序遍历和[中序遍历]
根据前序遍历和[中序遍历] 1. 递归法: 先序遍历:根节点→左子树→右子树. 中序遍历:左子树→根节点→右子树. 后续遍历:左子树→右子树→根节点. 根据前序遍历和中序遍历建立二叉树,根据以上性质可 ...
- 二叉树先序遍历、中序遍历、后序遍历 递归和非递归算法
一.二叉树先序遍历 (1)递归算法 // 递归先序遍历 public static void recursionPreorderTraversal(TreeNode root) {if (root ! ...
- python实现二叉树的重建1 之由前序遍历和中序遍历重建
前言 此题是关于树的面试题目的常见题型,题目的含义很清晰,这个就不用多说了 解法 关于这道题的解法有很多不同的样式,通用的解法是这样的: 假如现在我们有如下两个遍历的情况 preorder: [1, ...
- 通过前序遍历和中序遍历构建二叉树 python实现
前言 通过前序遍历和中序遍历构建二叉树的原理,主要是找前序遍历根节点在中序遍历中的位置,然后将二叉树而成左子树和右子树,然后依次进行这样的操作,思路还是比较简单的 代码 class Node:def ...
- 根据二叉树的前序遍历和中序遍历重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- python实现二叉树遍历(前序遍历、中序遍历、后序遍历)
python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...
最新文章
- 新建ROS工作工作空间
- Session——servlet
- swift 网络请求中含有特殊字符的解决方案
- export function函数传参_04 js高阶函数(惰性函数、柯里化函数、compose函数)和单例设计模式...
- 京东云Ubuntu下安装mysql
- 一建管道工程122知识点_背诵的知识点是否边缘化?一建市政一本通+学霸笔记,教你只记重点...
- 利用pagespeed插件优化网站css层叠样式文件
- 嵌入式软件设计第11次实验报告
- numpy—np.stack、np.hstack、np.vstack
- 也来说说C#异步委托
- LeetCode:每日一题(2020.4.6)
- rollup打包js的注意点-haorooms博客分享
- 天正CAD启动时显示服务器名称为空,如何解决天正建筑2014启动时出现error
- mysql 查看校对集,MySQL校对集
- 无人驾驶技术——无损卡尔曼滤波(UKF)
- windowsmobile软件_经验:CSPJ/S初赛知识点整理(NOIP硬件与软件基础)
- prototype全解全析
- 概率论与数理统计——MATLAB
- Eudemon1000E防火墙用串口管理提示: User interface con0 is locked!
- 聊聊时代中的那些坚持