java - ArrayList 的奇怪行为

标签 java java-8

我有以下代码 -

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 这是预期的。

我的问题是 -

  1. 如果列表中有 2 个元素,为什么它不从列表中删除所有元素?
  2. 为什么只有当我们有更多元素时才会出现 java.util.ConcurrentModificationException 异常?我在两个元素上尝试了很多时间。

我使用的是 Java 8。

提前致谢。

最佳答案

实际上,当您从列表中删除 1a 时,大小会减小,现在列表中只有 1 个元素,因此循环不会执行第二次,从而导致保留第二个元素.

关于java - ArrayList 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942126/

相关文章:

java - 我如何访问对象属性和对象方法?

java - 如何使用Java8功能根据参数从集合中获取项目

java - openjdk 8补丁版本

java - 在 Java 8 中按 map 列表分组

java - 是否有与 C# linq let 等效的 java lambda 表达式?

java - Netty 游戏服务器与游戏线程通信

java - 将 java -cp 与 jar 文件一起使用时出错

java - 为什么我无法从 java 中的 POST 请求读取正文?

java - 从 ZoneDdateTime 转换日期给出本地时间而不是 ZonedTime

java - Java run() 方法如何工作?