为什么没有isnext,hasprevious等Iterator或listIterator方法检查ConcurrentModificationException

时间:2014-01-30 07:24:20

标签: java collections

我知道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());
    }

2 个答案:

答案 0 :(得分:1)

编辑:删除了一堆废话

所以问题是:为什么不hasNext()检查并发修改,就像Iterator的其他方法一样。

如果我打算猜测,hasNext()没有太多用处,除非之后有next()。因此,不是在2个地方进行检查,而是在next()

答案 1 :(得分:1)

hasNext对于ArrayList&#39; s迭代器检查修改,它只查看大小。

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

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