JAVA集合-Iterable接口

    实现Iterable接口,创建一个轻量级的迭代器,用于安全的遍历元素、移除元素、添加元素。允许对象成为for-each循环的目标。其中涉及fail-fast机制。

    遍历的方式

        1. for(object o : list){}

        2. list.foreach();

        3. Iterator it = col.Iterator();

        for(it.hasNext){it.next();}

     fail-fast(快速失败)机制

     是集合中检测错误机制。集合的结构发生变化,可能会抛出ConcurrentModificationException异常。

     出现该异常原因,如在遍历期间list.romove(i)或list.add(i)。ArrayList的iterator()方法的具体实现返回Itr对象,Itr的hasNext()方法是检查游标索引是否等于list的长度。next()方法会检查list修改次数是否等于初始值的方法,不等于会抛出ConcurrentModificationException异常。在遍历期间变更会增加修改次数而初始值为零导致两者值不等,抛出异常。

     解决方案

     1)使用synchronized或者Lock进行同步iterator的迭代;

     2)使用并发线程安全的集合迭代,如并发容器CopyOnWriteArrayList或者ConcurrentHashMap。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,627评论 0 11
  • 彩排完,天已黑
    刘凯书法阅读 4,348评论 1 3
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 126,638评论 2 7