我知道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您的问题。