Map中的forEach方法

/ Code / 没有评论 / 100浏览
转载请标明出处^_^
原文首发于:www.zhangruibin.com
本文出自于:RebornChang的博客

HashMap

HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 AbstractMap实现了Map接口。 Map接口里面有一个forEach方法,@since 1.8。

default void forEach(BiConsumer<? super K, ? super V> action) {
       Objects.requireNonNull(action);
       for (Map.Entry<K, V> entry : entrySet()) {
           K k;
           V v;
           try {
               k = entry.getKey();
               v = entry.getValue();
           } catch(IllegalStateException ise) {
               // this usually means the entry is no longer in the map.
               throw new ConcurrentModificationException(ise);
           }
           action.accept(k, v);
       }
   }

官方解释: 对此映射中的每个条目执行给定操作,直到所有条目已处理或操作引发异常。除非由实现类指定,操作将在入口集迭代的顺序(如果指定了迭代顺序)。 操作引发的异常将中继到调用方。

解读: 使用了try catch 抛出的异常为ConcurrentModificationException,标示在线程并发进行读写的时候会出现异常,即,不支持并发操作。

使用方法:

      Map<Object, Object> map = new HashMap<>();
      map.put("name", "RebornChang");
      map.put("gender", "男");
      map.put("phone", "18888888888");
      map.put(null, null);
      //1.Map的迭代
      // 通用的Map迭代方式
      System.out.println("==============Map的迭代======================");
      for (Map.Entry<Object, Object> entry : map.entrySet()) {
          System.out.println(entry.getKey() + ":" + entry.getValue());
      }
      System.out.println("====================================");
      // JDK8的迭代方式
      map.forEach((key, value) -> {
          System.out.println(key + ":" + value);
      });
      
      
      

结果:

        ==============Map的迭代======================
        null:null
        gender:男
        phone:18888888888
        name:RebornChang
        ====================================
        null:null
        gender:男
        phone:18888888888
        name:RebornChang

亲,博主的微信公众号

‘程序员小圈圈’开始持续更新了哟~~

长按图片识别二维码或者微信扫描二维码或者直接搜索名字 ‘CXYXQQ’ 即可关注本公众号哟~~

不只是有技术哟~~

还可以学下教育知识以及消遣娱乐哟~~

求关注哟~~