hashmap 有以下几种遍历方式:
- 使用迭代器(Iterator)EntrySet
- 使用迭代器(Iterator)KeySet
- 使用
For Each EntrySet
- 使用
For Each KeySet
- 使用 Lambda 表达式
- 使用 Streams APi(单线程 / 多线程)
使用 EntrySet
Iterator<Map.Entry<Key.class, Value.class>> iterator = hashMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Key.class, Value.class> entry = iterator.next();
System.out.println(entry.getKey() + ": " + entry.getValue());
}
使用 KeySet
Iterator<Map.Entry> iterator = hashMap.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next();
System.out.println(key + ": " + map.get(key));
}
EntrySet 和 KeySet 的性能比较
EntrySet
的性能好于 KeySet
,因为KeySet
要多一次get()
的操作。
ForEach EntrySet
for (Map.Entry<Key.calss, Value.class> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
ForeEach KeySet
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
Lambda
map.forEach((key, value) -> {
System.out.println(key + ": " + value);
});
Streams API 单线程
map.entrySet().stream().forEach((entry) -> {
System.out.println(entry.getKey() + ": " + entry.getValue());
})
Streams API 多线程
map.entrySet().parallelStream().forEach((entry) -> {
System.out.println(entry.getKey() + ": " + entry.getValue());
})