HashMap的多种遍历方式从大体中归类 , 可以分为以下4类 :
迭代器(Iterator)
For Each
Lambda (JDK 1.8 +)
Streams API (JDK 1.8 +)
但是每种方式又有不同的实现类型 :
使用迭代器(Iterator)EntrySet KeySet 的方式进行遍历;
使用 For Each EntrySet For Each KeySet 的方式进行遍历;
使用 Lambda 表达式的方式进行遍历;
使用 Streams API 单线程 多线程 的方式进行遍历;
接下来我们看每种方式的具体实现代码
迭代器(Iterator)EntrySet
HashMap<String , String> hashMap = new HashMap<>();hashMap.put("1","name");hashMap.put("2","age");Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> entry = iterator.next();Object key = entry.getKey();Object val = entry.getValue();System.out.println("key : " + key + "-----" + "val : " + val);}
2. 迭代器(Iterator)KeySet
HashMap<String , String> hashMap = new HashMap<>();hashMap.put("1","name");hashMap.put("2","age");Iterator<String> iterator = hashMap.keySet().iterator();while (iterator.hasNext()) {String key = iterator.next();Object val = hashMap.get(key);System.out.println("key : " + key + "-----" + "val : " + val);}
3. For Each EntrySet
HashMap<String , String> hashMap = new HashMap<>();hashMap.put("1","name");hashMap.put("2","age");for (Map.Entry<String, String> entry : hashMap.entrySet()) {Object key = entry.getKey();Object val = entry.getValue();System.out.println("key : " + key + "-----" + "val : " + val);}
4. For Each KeySet
HashMap<String , String> hashMap = new HashMap<>();hashMap.put("1","name");hashMap.put("2","age");for (String key : hashMap.keySet()) {Object val = hashMap.get(key);System.out.println("key : " + key + "-----" + "val : " + val);}
5. Lambda
HashMap<String , String> hashMap = new HashMap<>();hashMap.put("1","name");hashMap.put("2","age");hashMap.forEach((key , val) -> System.out.println("key : " + key + "-----" + "val : " + val));
6.Streams API 单线程
HashMap<String , String> hashMap = new HashMap<>();hashMap.put("1","name");hashMap.put("2","age");hashMap.entrySet().stream().forEach((entry) -> {Object key = entry.getKey();Object val = entry.getValue();System.out.println("key : " + key + "-----" + "val : " + val);});
7.Streams API 多线程
HashMap<String , String> hashMap = new HashMap<>();hashMap.put("1","name");hashMap.put("2","age");hashMap.entrySet().stream().parallel().forEach((entry) -> {Object key = entry.getKey();Object val = entry.getValue();System.out.println("key : " + key + "-----" + "val : " + val);});
注 : 我们不能在遍历Map时使用map.remove()方法 , 否则就会抛出异常 :
java.util.ConcurrentModificationException , 这种办法是非安全的 , 我们可以使用Iterator.remove() ,或者是Lambda 中的 removeIf() , 或者是Stream 中的 filter() 过滤或者删除相关数据
文章转载自猿人刘先生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




