在JDK8之前,可以使用keySet或entrySet遍历HashMap。 JDK8中引入了map.foreach。
实际上,keySet通过迁移到迭代器对象和从hashMap中检索与key对应的value进行了两次遍历。 entrySet在条目中只遍历一次就包含key和value会更有效率。 对于JDK8,请使用Map.foreach方法。
1. keySet和entrySet
1.1基本使用方法
keySet:
Map map=new HashMap (;
Iterator it=map.keySet ().iterator );
对象密钥;
对象值;
while(it.Hasnext ) ) ) )。
key=it.next (;
value=map.get(key;
system.out.println (key ' : ' value;
}
企业:
Map map=new HashMap (;
Iterator it=map.entrySet ().iterator );
对象密钥;
对象值;
while(it.Hasnext ) ) ) )。
映射. entry entry=(映射. entry ) it.next );
key=entry.getKey (;
value=entry.getValue (;
system.out.println(key'='value;
}
2. Map.foreach
从JDK8开始,引入了Map.foreach。
Map.foreach的本质仍然是entrySet
默认语音反馈(biconsumersuperk? super v动作) {
objects.require nonnull (动作;
for (map.entry entry : entryset ) () () ) ) ) ) ) )。
k;
v;
try {
k=entry.getKey (;
v=entry.getValue (;
} catch (illegalstateexceptionise ) )
//thisusuallymeanstheentryisnolongerinthemap。
thrownewconcurrentmodificationexception (ise;
}
action.accept(k,v );
}
}
与lambda表达式一起使用会使操作变得容易。
2.1使用Java 8的foreach lambda表达式遍历Map
Map items=new HashMap (;
items.put(a ),10 );
items.put('b ',20 );
items.put('c ',30 );
items.put('d ',40 );
items.put('e ',50 );
items.put('f ',60 );
items.foreach((k,v )-system.out.println ) ) item: ) k'count: ) v );
items.foreach((k,v )-{
system.out.println (item : ' k ' count : ' v );
if(e ).equals ) ) ) {
system.out.println(Helloe );
}
);