HashMap我整理了七种遍历方式:
-
Iterator entrySet
-
Iterator keySet
-
ForEach entrySet
-
ForEach keySet
-
lambda
-
stream entrySet
-
stream 多线程 entrySet
下面看代码:
public static void main(String[] args) {HashMap<String, String> map = new HashMap<>();map.put("1", "孙悟空");map.put("2", "布尔玛");map.put("3", "雅木茶");map.put("4", "普亚路");map.put("5", "乌龙");// 1、Iterator entrySetIterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> next = iterator.next();System.out.println(next.getKey());System.out.println(next.getValue());}// 2、Iterator keySetIterator<String> keySetIterator = map.keySet().iterator();while (keySetIterator.hasNext()) {String key = keySetIterator.next();System.out.println(key);System.out.println(map.get(key));}// ForEach entrySetfor (Map.Entry<String, String> stringStringEntry : map.entrySet()) {System.out.println(stringStringEntry.getKey());System.out.println(stringStringEntry.getValue());}// ForEach keySetfor (String key : map.keySet()) {System.out.println(key);System.out.println(map.get(key));}// lambdamap.forEach((key,value)->{System.out.println(key);System.out.println(value);});// stream entrySetmap.entrySet().stream().forEach(entry->{System.out.println(entry.getKey());System.out.println(entry.getValue());});// stream 多线程 entrySetmap.entrySet().parallelStream().forEach(entry->{System.out.println(entry.getKey());System.out.println(entry.getValue());});}
效率:
实际应用能用entrySet就用entrySet,该效率比keySet快了一倍。
至于为什么entrySet比keySet效率块,是因为遍历的时候,entry已经获取到了key和value,直接用即可,而keySet 获取到key之后又要通过map.get(key) 遍历一遍,因此效率没有entrySet快。
存在阻塞时 parallelStream 性能最高, 非阻塞时 parallelStream 性能最低 。该方法尽量在数据量巨大的时候才考虑用,不然区别不大。