在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遍历相关推荐

  1. java根据前序和中序建树_Java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)...

    Java实现根据前序遍历构建二叉树(前序遍历.中序遍历.后序遍历),Java关于ACM的代码真的好少,想参考如何用java实现二叉树googl 前言 Java关于ACM的代码真的好少,想参考如何用ja ...

  2. Java实现前序遍历,中序遍历,后序遍历,层序遍历

    1.遍历思想 前序遍历首先访问根节点,然后访问左子树,最后访问右子树. 中序遍历先访问左子树,然后访问根节点,最后访问右子树. 后续遍历先访问左子树,然后访问右子树,最后访问根节点. 层序遍历则是从上 ...

  3. 用Java实现二叉树前序遍历、中序遍历和后序遍历。

    用Java实现二叉树前序遍历.中序遍历和后序遍历. 解析: public class Tree {private int data; /* 数据节点 */private Tree left; /* 左 ...

  4. 根据前序遍历和[中序遍历]

    根据前序遍历和[中序遍历] 1. 递归法: 先序遍历:根节点→左子树→右子树. 中序遍历:左子树→根节点→右子树. 后续遍历:左子树→右子树→根节点. 根据前序遍历和中序遍历建立二叉树,根据以上性质可 ...

  5. 二叉树先序遍历、中序遍历、后序遍历 递归和非递归算法

    一.二叉树先序遍历 (1)递归算法 // 递归先序遍历 public static void recursionPreorderTraversal(TreeNode root) {if (root ! ...

  6. python实现二叉树的重建1 之由前序遍历和中序遍历重建

    前言 此题是关于树的面试题目的常见题型,题目的含义很清晰,这个就不用多说了 解法 关于这道题的解法有很多不同的样式,通用的解法是这样的: 假如现在我们有如下两个遍历的情况 preorder: [1, ...

  7. 通过前序遍历和中序遍历构建二叉树 python实现

    前言 通过前序遍历和中序遍历构建二叉树的原理,主要是找前序遍历根节点在中序遍历中的位置,然后将二叉树而成左子树和右子树,然后依次进行这样的操作,思路还是比较简单的 代码 class Node:def ...

  8. 根据二叉树的前序遍历和中序遍历重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

  9. python实现二叉树遍历(前序遍历、中序遍历、后序遍历)

    python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...

最新文章

  1. 新建ROS工作工作空间
  2. Session——servlet
  3. swift 网络请求中含有特殊字符的解决方案
  4. export function函数传参_04 js高阶函数(惰性函数、柯里化函数、compose函数)和单例设计模式...
  5. 京东云Ubuntu下安装mysql
  6. 一建管道工程122知识点_背诵的知识点是否边缘化?一建市政一本通+学霸笔记,教你只记重点...
  7. 利用pagespeed插件优化网站css层叠样式文件
  8. 嵌入式软件设计第11次实验报告
  9. numpy—np.stack、np.hstack、np.vstack
  10. 也来说说C#异步委托
  11. LeetCode:每日一题(2020.4.6)
  12. rollup打包js的注意点-haorooms博客分享
  13. 天正CAD启动时显示服务器名称为空,如何解决天正建筑2014启动时出现error
  14. mysql 查看校对集,MySQL校对集
  15. 无人驾驶技术——无损卡尔曼滤波(UKF)
  16. windowsmobile软件_经验:CSPJ/S初赛知识点整理(NOIP硬件与软件基础)
  17. prototype全解全析
  18. 概率论与数理统计——MATLAB
  19. Eudemon1000E防火墙用串口管理提示: User interface con0 is locked!
  20. 聊聊时代中的那些坚持

热门文章

  1. max创意量子计算机,创意编程与MaxMSP
  2. Ubuntu桌面版工作环境配置(一、常用命令及软件介绍)
  3. 力软快速开发框架的建设与介绍
  4. 史上最全web前端学习路线
  5. COMUUU让音乐回归:人人都可玩转音乐,更在音乐中找寻知音
  6. 2018年腾讯游戏安全技术竞赛进阶版writeup
  7. uni-app微信小程序支付
  8. windows下 python3 安装channels报错
  9. 吴恩达机器学习,监督学习线性回归与梯度下降(MATLAB实现)
  10. iOS数据持久化方案