java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点

先初始化一个map

public class TestMap {

public static Map map = new HashMap();

}

keySet values

如果只需要map的key或者value,用map的keySet或values方法无疑是最方便的

// KeySet 获取key

public void testKeySet() {

for (Integer key : map.keySet()) {

System.out.println(key);

}

}

// values 获取value

public void testValues() {

for (Integer value : map.values()) {

System.out.println(value);

}

}

keySet get(key)

如果需要同时获取key和value,可以先获取key,然后再通过map的get(key)获取value

需要说明的是,该方法不是最优选择,一般不推荐使用

// keySet get(key) 获取key and value

public void testKeySetAndGetKey() {

for (Integer key : map.keySet()) {

System.out.println(key + ":" + map.get(key));

}

}

entrySet

通过对map entrySet的遍历,也可以同时拿到key和value,一般情况下,性能上要优于上一种,这一种也是最常用的遍历方法

// entrySet 获取key and value

public void testEntry() {

for (Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + ":" + entry.getValue());

}

}

Iterator

对于上面的几种foreach都可以用Iterator代替,其实foreach在java5中才被支持,foreach的写法看起来更简洁

但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素

// Iterator entrySet 获取key and value

public void testIterator() {

Iterator> it = map.entrySet().iterator();

while (it.hasNext()) {

Map.Entry entry = it.next();

System.out.println(entry.getKey() + ":" + entry.getValue());

// it.remove(); 删除元素

}

}

Lambda

java8提供了Lambda表达式支持,语法看起来更简洁,可以同时拿到key和value,不过,经测试,性能低于entrySet,所以更推荐用entrySet的方式

// Lambda 获取key and value

public void testLambda() {

map.forEach((key, value) -> {

System.out.println(key + ":" + value);

});

}

简单性能测试

用10万条数据,做了一个简单性能测试,数据类型为Integer,map实现选取HashMap

static {

for (int i = 0; i < 100000; i++) {

map.put(i, 1);

}

}

测试结果如下:

KeySet: 392

Values: 320

keySet get(key): 552

entrySet: 465

entrySet Iterator:508

Lambda: 536

需要说明的是,map存储的数据类型,map的大小,以及map的不同实现方式都会影响遍历的性能,所以该测试结果仅供参考

总结

如果只是获取key,或者value,推荐使用keySet或者values方式

如果同时需要key和value推荐使用entrySet

如果需要在遍历过程中删除元素推荐使用Iterator

如果需要在遍历过程中增加元素,可以新建一个临时map存放新增的元素,等遍历完毕,再把临时map放到原来的map中

java foreach 遍历map_java中遍历map的几种方法相关推荐

  1. java foreach 遍历map_Java中遍历Map

    Java中的map遍历有多种方法,如最早的Iterator,Java5支持的foreach,Java8 Lambda. 先初始化一个map public class TestMap { public ...

  2. Java求两集合中元素交集的四种方法对比总结

    hello,你好呀,我是灰小猿,一个超会写bug的程序猿! 最近在做项目的时候有用到对两个集合中的元素进行对比求其交集的情况,因为涉及到的数据量比较大,所以在进行求两个集合中元素交集的时候,就应该考虑 ...

  3. java 不知道类名_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里 ...

  4. java 复制文件_Java中复制文件的4种方法

    Java拷贝文件是一种非常常见的操作.但是java.io.File类没有任何快捷方法可以将文件从源复制到目标文件.在这里,我们将了解学习可以在java中复制文件的四种不同方法. 方法一:使用Strea ...

  5. java 取名字_Java 中获取类名的三种方法,你知道几种?

    之前我们分享过Java高级篇--深入浅出Java类加载机制这篇文章,今天来带你了解获取类名的三种方法. 获取类名的方法 Java 中获取类名的方式主要有以下三种. getName()返回的是虚拟机里面 ...

  6. java 获取类名_Java中获取类名的3种方法!

    获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...

  7. java中map嵌套map_java中遍历MAP,嵌套map的几种方法

    java中遍历MAP的几种方法 Map map=new HashMap(); map.put("username", "qq"); map.put(" ...

  8. Java遍历Map的5种方法

    Map作为Java中的一种集合,以键值对的形式存放一批数据,经常会被我们应用在项目中. 既然是一种集合,自然就有需要遍历的场景.今天就来说5种遍历Map的方法. 01通过map对象的entrySet遍 ...

  9. php 解析java map,java_java遍历Map的几种方法分析,本文实例分析了java遍历Map的几 - phpStudy...

    java遍历Map的几种方法分析 本文实例分析了java遍历Map的几种方法.分享给大家供大家参考,具体如下: Java代码: Map map=new HashMap(); map.put(" ...

最新文章

  1. 简单介绍ASP中Cache技术的应用
  2. JSDOM模型的样例
  3. document.execCommand()函数可用参数解析 (转)
  4. Bootstrap3 插件的原理
  5. Redis问的太深入,面试官说:“你先回去等通知吧“!
  6. 四、kafka整体架构
  7. 更新的ccna实训交换机基本配置(附图)
  8. 中大型企业的固定资产管理办法
  9. SSH框架之文件上传
  10. 【转】 【技巧 】 数学难题大揭秘:减少计算错误的技术
  11. [OpenAirInterface实战-16] :OAI 软件无线电USRP X300/X310硬件详解
  12. 计算机音乐三只小熊,三只小熊教案音乐
  13. 自定义MVC原理与框架
  14. Pycharm中Qt designer的配置,.ui文件转.py文件,运行.py
  15. 从红包场景谈事务一致性
  16. MongoDB系列六(聚合).
  17. 怪物之心无法触发_异度神剑2怪物之心任务怎么做_力男支线任务怪物之心流程介绍_3DM单机...
  18. Java字符拼成图片
  19. 图片转视频python/ffmpeg
  20. OS及Mac开源项目和学习资料【超级全面】

热门文章

  1. 清北复交人浙南,都有哪些CS院校推荐?
  2. 《程序员》11年01期精彩内容:成功产品三要素
  3. layerUI弹出页面之后关闭刷新当前显示页面
  4. 「洛谷 P5043」:树同构【树哈希】
  5. 周志华《机器学习》课后习题解答系列(七):Ch6.3 - SVM对比实验
  6. 爬取携程景点评论数据【最新方法】,分析AJAX实现页数跳转的爬取方法
  7. 服务器是什么?有什么功能?具有什么意义?
  8. tar打包split分割分解拆分大包文件
  9. android手机当U盘使用
  10. APP 开发软件为什么价格相差非常大?