Java中遍历Map集合的5种方式总结
方式一通过Map.keySet使用iterator遍历
@Test
publicvoidtestHashMap1(){
Mapmap=newHashMap<>();
map.put(001,"Java");
map.put(002,"数据库");
map.put(003,"Vue");
System.out.println(map);
//通过Map.keySet使用iterator遍历key,然后通过key得到对应的value值
Iteratoriterator=map.keySet().iterator();
while(iterator.hasNext()){
Integerkey=iterator.next();
Stringvalue=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
publicvoidtestHashMap2(){
Mapmap=newHashMap<>();
map.put(001,"Java");
map.put(002,"数据库");
map.put(003,"Vue");
System.out.println(map);
//通过Map.entrySet使用iterator遍历key和value;注意SetentrySet():返回所有key-value对构成的Set集合
Iterator>entries=map.entrySet().iterator();
while(entries.hasNext()){
Map.Entryentry=entries.next();
System.out.println(entry);
}
}
结果:
{1=Java,2=数据库,3=Vue}
1=Java
2=数据库
3=Vue
方式三通过Map.keySet遍历
@Test
publicvoidtestHashMap3(){
Mapmap=newHashMap<>();
map.put(001,"Java");
map.put(002,"数据库");
map.put(003,"Vue");
System.out.println(map);
//通过Map.keySet遍历key,然后通过key得到对应的value值
for(Integerkey: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
publicvoidtestHashMap4(){
Mapmap=newHashMap<>();
map.put(001,"Java");
map.put(002,"数据库");
map.put(003,"Vue");
System.out.println(map);
//使用For-Each迭代entries,通过Map.entrySet遍历key和value
for(Map.Entryentry: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
publicvoidtestHashMap5(){
Mapmap=newHashMap<>();
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源码
defaultvoidforEach(BiConsumeraction){
Objects.requireNonNull(action);
for(Map.Entryentry:entrySet()){
Kk;
Vv;
try{
k=entry.getKey();
v=entry.getValue();
}catch(IllegalStateExceptionise){
//thisusuallymeanstheentryisnolongerinthemap.
thrownewConcurrentModificationException(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集合内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!