在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. js中对arry数组的各种操作小结
  2. react发送Ajax中文问号,如何从Javascript/React发送AJAX请求并在pythonrestapi中接收数据...
  3. Android 5.1 修改系统默认语言
  4. 如何玩转CSS列表样式?速查!
  5. nginx的ngx_http_realip_module模块和http头X-Forwarded-For、X-Real-IP
  6. epoll怎么实现的
  7. 论文浅尝 - ICML2020 | 基于子图推理的归纳式关系预测
  8. Java Web学习总结(43)—— Restful API 版本控制
  9. 循环执行次数 n(n+1)/2
  10. 什么是 PostgreSQL 横向子查询?
  11. HTML5标签canvas制作动画
  12. U3D 加在菜单栏加按键 和 动态生成资源束bundles
  13. hrm系统源码php,悟空HRM下载_悟空HRM0.1开源版 - 系统之家
  14. Pr入门系列之五:熟悉时间轴操作
  15. GPS 经纬度转换 百度、高德经纬度
  16. 57之最,来找找你的之最吧
  17. PIL读入图片转为BGR
  18. 力扣1438——绝对差不超过限制的最长连续子数组(滑动窗口+单调队列)
  19. 印象笔记无法连接服务器解决办法
  20. 系统集成项目管理工程师笔记_备考常见英文词汇汇总

热门文章

  1. 学生党开学收藏榜单,通话质量好的蓝牙耳机
  2. linux msm dts加载分析
  3. numpy transpose 和 pytorch transpose
  4. uniapp实现微信H5扫码
  5. vue使用computed有参数_【Vue原理】Computed - 源码版
  6. 字节小组长薪资被应届生员工倒挂7K,不把老员工当人?
  7. Android大厂面试题锦集
  8. 简单明了的Promise基本知识点
  9. U盘中文件复制到ARM开发板
  10. html eq判断相等,HTML中Smarty中的if语句条件修饰词eq相等ne、neq不相等,gt大于