我有以下代码 -
import java.util.ArrayList;
import java.util.List;
public class ArrayListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1a");
list.add("2b");
for (String s : list) {
list.remove(s);
}
System.out.println("Removed");
System.out.println(list);
}
}
如果我运行这个程序,我希望它应该抛出异常,但输出是“2b”。如果它运行良好那么为什么它没有删除最后一个对象。
如果我在列表中添加更多元素,则会出现异常 java.util.ConcurrentModificationException 这是预期的。
我的问题是 -
- 如果列表中有 2 个元素,为什么它不从列表中删除所有元素?
- 为什么只有当我们有更多元素时才会出现 java.util.ConcurrentModificationException 异常?我在两个元素上尝试了很多时间。
我使用的是 Java 8。
提前致谢。
最佳答案
实际上,当您从列表中删除 1a 时,大小会减小,现在列表中只有 1 个元素,因此循环不会执行第二次,从而导致保留第二个元素.
关于java - ArrayList 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942126/