我知道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());
}
答案 0 :(得分:1)
编辑:删除了一堆废话
所以问题是:为什么不hasNext()
检查并发修改,就像Iterator的其他方法一样。
如果我打算猜测,hasNext()
没有太多用处,除非之后有next()
。因此,不是在2个地方进行检查,而是在next()
。
答案 1 :(得分:1)
hasNext
对于ArrayList&#39; s迭代器不检查修改,它只查看大小。
如果在列表中再添加一个元素,则会进入第二次迭代,然后next
会按预期失败。
至于为什么以这种方式实施......给你的问题+1。