Java 如果没有迭代器,这段代码会失败吗?

Java 如果没有迭代器,这段代码会失败吗?,java,Java,如果你有 for(int i = 0; i<arrayList.size(); i++) arrayList.remove(i); for(int i=0;i使用上述代码删除元素i的问题是您会跳过元素 对于以下内容,我假设此“更正”代码: for(int i=0;i这不会引发异常: for(int i = 0; i<arrayList.size(); i++) arrayList.remove(i); …将引发异常,因为您在对列表进行迭代时正在修改该列

如果你有

for(int i = 0; i<arrayList.size(); i++)
          arrayList.remove(i);

for(int i=0;i使用上述代码删除元素
i
的问题是您会跳过元素

对于以下内容,我假设此“更正”代码:


for(int i=0;i这不会引发异常:

for(int i = 0; i<arrayList.size(); i++)
    arrayList.remove(i);

…将引发异常,因为您在对列表进行迭代时正在修改该列表。在这种情况下,您将需要一个迭代器。

您需要使用小写的
i
而不是大写的
i
如果您在列表上反向循环,则删除way@jheimbouch:不,它不会抛出那个。代码不会compile-但是如果你修复它,使它能够编译,它将从列表中删除一半的元素。我猜这不是你想要的。啊哈,现在这很有意义。但是你是说如果我设置I=arrayList.Size()-1和我--然后当我删除它时,它将处理整个列表。另外,在删除中使用索引0而不是i将处理相同的问题?@camel man我不确定我是否了解你的问题,但我会尝试:如果你从前面到后面删除索引后的元素,则向上移动一个索引。因此,如果你从后面到前面删除(i--)您总是删除最后一个元素,所以这不是问题。使用索引0删除也可以,只要您在循环中不增加
i
,或者只删除一半元素(增加
i
+删除第一个元素基本上相当于2的步长)。
for(int i = 0; i<arrayList.size(); i++)
    arrayList.remove(i);
for(Object o : arrayList)
    arrayList.remove(o);