一、概述
如果我有一个实现Map
接口的对象,并且希望遍历该接口中包含的每一对,那么遍历该映射的最有效方法是什么?
元素的顺序是否取决于我对接口的特定map实现?
二、详解
我找到了10种遍历的方法(请参见下文)。
-
使用迭代器和Map.Entry
long i = 0; Iterator
> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); i += pair.getKey() + pair.getValue(); } -
使用foreach和Map.Entry
long i = 0; for (Map.Entry
pair : map.entrySet()) { i += pair.getKey() + pair.getValue(); } -
在Java 8使用forEach
final long[] i = {0}; map.forEach((k, v) -> i[0] += k + v);
-
使用keySet和foreach
long i = 0; for (Integer key : map.keySet()) { i += key + map.get(key); }
-
使用keySet和迭代器
long i = 0; Iterator
itr2 = map.keySet().iterator(); while (itr2.hasNext()) { Integer key = itr2.next(); i += key + map.get(key); } -
使用for和Map.Entry
long i = 0; for (Iterator
> entries = map.entrySet().iterator(); entries.hasNext(); ) { Map.Entry entry = entries.next(); i += entry.getKey() + entry.getValue(); } -
使用Java 8 Stream API
final long[] i = {0}; map.entrySet().stream().forEach(e -> i[0] += e.getKey() + e.getValue());
-
使用Java 8 Stream API parallel
final long[] i = {0}; map.entrySet().stream().parallel().forEach(e -> i[0] += e.getKey() + e.getValue());
-
使用IterableMap的
Apache Collections
long i = 0; MapIterator
it = iterableMap.mapIterator(); while (it.hasNext()) { i += it.next() + it.getValue(); } -
使用Eclipse MutableMap(CS)集合
final long[] i = {0}; mutableMap.forEachKeyValue((key, value) -> { i[0] += key + value; });
如若转载,请注明出处:https://www.javaidea.cn/article/8224.html