【发布时间】:2014-01-30 07:24:20
【问题描述】:
我知道failfast迭代器会尽最大努力检查ConcurrentModificationException。为什么hasext或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());
}
【问题讨论】:
-
我在这里没有看到任何迭代器。
-
迭代器隐藏在 for-each 语句中。
-
@Kayaman 我的意思是
iterator()。 -
对于每个循环都被编译器内部推断为迭代器
-
是的,for(String s : lilong) 使用 lilong.iterator() 转换为代码。
标签: java collections