hashmap 有以下几种遍历方式:

  1. 使用迭代器(Iterator)EntrySet
  2. 使用迭代器(Iterator)KeySet
  3. 使用 For Each EntrySet
  4. 使用 For Each KeySet
  5. 使用 Lambda 表达式
  6. 使用 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());
})