Java中遍历Map集合的5种方式总结
方式一 通过map.keyset使用iterator遍历
@test public void testhashmap1() { map<integer, string> map = new hashmap<>(); map.put(001, "java"); map.put(002, "数据库"); map.put(003, "vue"); system.out.println(map); // 通过map.keyset使用iterator遍历key,然后通过key得到对应的value值 iterator<integer> iterator = map.keyset().iterator(); while (iterator.hasnext()) { integer key = iterator.next(); string value = map.get(key); system.out.println("key = " + key + ", value = " + value); } }
结果:
{1=java, 2=数据库, 3=vue}
key = 1, value = java
key = 2, value = 数据库
key = 3, value = vue
方式二 通过map.entryset使用iterator遍历
@test public void testhashmap2() { map<integer, string> map = new hashmap<>(); map.put(001, "java"); map.put(002, "数据库"); map.put(003, "vue"); system.out.println(map); // 通过map.entryset使用iterator遍历key和value;注意 set entryset():返回所有key-value对构成的set集合 iterator<map.entry<integer, string>> entries = map.entryset().iterator(); while (entries.hasnext()) { map.entry<integer, string> entry = entries.next(); system.out.println(entry); } }
结果:
{1=java, 2=数据库, 3=vue}
1=java
2=数据库
3=vue
方式三 通过map.keyset遍历
@test public void testhashmap3() { map<integer, string> map = new hashmap<>(); map.put(001, "java"); map.put(002, "数据库"); map.put(003, "vue"); system.out.println(map); // 通过map.keyset遍历key,然后通过key得到对应的value值 for (integer key : map.keyset()) { system.out.println("key = " + key + ", value = " + map.get(key)); } }
结果:
{1=java, 2=数据库, 3=vue}
key = 1, value = java
key = 2, value = 数据库
key = 3, value = vue
方式四 通过for-each迭代entries,使用map.entryset遍历
@test public void testhashmap4() { map<integer, string> map = new hashmap<>(); map.put(001, "java"); map.put(002, "数据库"); map.put(003, "vue"); system.out.println(map); // 使用for-each迭代entries,通过map.entryset遍历key和value for (map.entry<integer, string> entry : map.entryset()) { system.out.println("key = " + entry.getkey() + ", value = " + entry.getvalue()); } }
{1=java, 2=数据库, 3=vue}
key = 1, value = java
key = 2, value = 数据库
key = 3, value = vue
方式五 使用lambda表达式foreach遍历
@test public void testhashmap5() { map<integer, string> map = new hashmap<>(); map.put(001, "java"); map.put(002, "数据库"); map.put(003, "vue"); system.out.println(map); // 使用lambda表达式foreach遍历 map.foreach((k, v) -> system.out.println("key = " + k + ", value = " + v)); }
foreach 源码
default void foreach(biconsumer<? super k, ? super v> action) { objects.requirenonnull(action); for (map.entry<k, v> entry : entryset()) { k k; v v; try { k = entry.getkey(); v = entry.getvalue(); } catch(illegalstateexception ise) { // this usually means the entry is no longer in the map. throw new concurrentmodificationexception(ise); } action.accept(k, v); } }
从源码可以看到,这种新特性就是在传统的迭代方式上加了一层壳,但是让代码变得更加简单。(开发中推荐使用)
总结
推荐使用 entryset 遍历 map 类集合 kv (文章中的第四种方式),而不是 keyset 方式进行遍历。
keyset 其实是遍历了 2 次,第一次是转为 iterator 对象,第二次是从 hashmap 中取出 key 所对应的 value值。而 entryset 只是遍历了一次,就把 key 和 value 都放到了 entry 中,效率更高。
values()返回的是 v 值集合,是一个 list 集合对象;keyset()返回的是 k 值集合,是一个 set 集合对象;entryset()返回的是 k-v 值组合集合。
如果是 jdk8,推荐使用map.foreach 方法(文章中的第五种方式)。
到此这篇关于java中遍历map集合的5种方式的文章就介绍到这了,更多相关java遍历map集合内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
下一篇: ES6的循环与可迭代对象示例详解
推荐阅读
-
Java Web开发过程中登陆模块的验证码的实现方式总结
-
Java中遍历Map集合的5种方式总结
-
Java中实现引用类型集合的深拷贝(for循环遍历+BeanUtils)
-
Map集合的遍历方式以及TreeMap集合保存自定义对象实现比较的Comparable和Comparator两种方式
-
Java分享笔记:使用keySet方法获取Map集合中的元素
-
JavaScript中利用各种循环进行遍历的方式总结
-
Java 中初始化 List 集合的 6 种方式!
-
java中List去除重复数据的5种方式总结
-
java中的集合之Map体系集合,Map接口及其实现类
-
Java集合中迭代器遍历过程的并发修改异常问题(Debug模式追踪)