HashMap的7种遍历方式
学习笔记,能帮到其他人更好了~
建议大家看原文HashMap 的 7 种遍历方式与性能分析!「修正篇」
注:1)尽量使用 entrySet 来实现 Map 集合的遍历,性能更高
EntrySet遍历时,直接将获取到的ley与value放入entry对中,可以直接获得;
而KeySet 遍历时使用了 map.get(key),相当于又遍历了一遍 Map 集合去查询 key 所对应的值,因此效率较低。
2)Iterator迭代器 和 forEach遍历的效率相差不大
1. 下面给出各个方式的简洁代码
注:下面的entry是 Integer:String 形式
- Iterator迭代器遍历——EntrySet
Iterator<Map.Entry<Integer, String>> iterator = map.EntrySet().iterator(); while(iterator.hasNext()){ Map.Entry<Integer, String> entry = ietrator.next(); System.out.println("key--" + enrty.getKey()); System.out.println("value--" + enrty.getValue()); }
- Iterator迭代器遍历——KeySet
Iterator<Integer> iterator = map.KeySet().iterator(); while(iterator.hasNext()){ Integer key = iterator.next(); System.out.println("key--" + key); System.out.println("value--" + map.get(key)); }
- For Each遍历——EntrySet
for(Map.Entry<Integer, String> entry : map.EntrySet()){ System.out.println("key--" + entry.getKey()); System.out.println("value--" + entry.getValue()); }
- For Each遍历——KeySet
for(Integer key : map.KeySet()){ System.out.println("key--" + key); System.out.println("value--" + map.get(key)); }
- Lambda表达式遍历(JDK1.8+)
map.forEach((key, value)->{ System.out.println("key--" + key); System.out.println("value--" + value); });
- Streams API遍历(JDK1.8+)——单线程stream()
map.entrySet().stream().forEach((entry)->{ System.out.println("key--" + entry.getKey()); System.out.println("value--" + entry.getValue()); });
- Streams API遍历(JDK1.8+)——多线程parallelStream()
map.entrySet().parallelStream().forEach((entry) -> { System.out.println("key--" + entry.getKey()); System.out.println("value--" + entry.getValue()); });