我知道failfast迭代器会尽最大努力检查ConcurrentModificationException。为什么像hasnext或hasPrevious这样的方法不检查ConcurrentModificationException并将其抛出?

出于以下准确的原因,以下代码可以很好地工作:尽管已对它们进行了结构上的修改,但仍未对CME检查这些方法

public static void main(String[] args) {
        // TODO Auto-generated method stub


        List<String> lilong = new ArrayList<String>();
        lilong.add("Queen");
        for(Iterator<String> iter =lilong.iterator();iter.hasNext();)
        {
            System.out.println(iter.next());
            lilong.add("King");
            lilong.remove(0);
            lilong.add("Star");
            lilong.remove(0);
            lilong.add("Sun");
            lilong.remove(0);
            lilong.add("Polar Bear");
            lilong.clear();

            lilong.add("There you go");

        }
        System.out.println("size="+ lilong.size()+"##element##"+lilong.iterator().next());
    }

最佳答案

数组列表的迭代器的hasNext不检查修改,它仅查看大小。

如果在列表中再添加一个元素,则会进行第二次迭代,然后next会按预期失败。

至于为什么以这种方式实施... +1您的问题。

07-23 14:52