相关疑难解决方法(0)

迭代集合,在循环中删除对象时避免使用ConcurrentModificationException

我们都知道你不能这样做:

for (Object i : l) {
    if (condition(i)) {
        l.remove(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

ConcurrentModificationException等等......这显然有时起作用,但并非总是如此.这是一些特定的代码:

public static void main(String[] args) {
    Collection<Integer> l = new ArrayList<>();

    for (int i = 0; i < 10; ++i) {
        l.add(4);
        l.add(5);
        l.add(6);
    }

    for (int i : l) {
        if (i == 5) {
            l.remove(i);
        }
    }

    System.out.println(l);
}
Run Code Online (Sandbox Code Playgroud)

当然,这会导致:

Exception in thread "main" java.util.ConcurrentModificationException
Run Code Online (Sandbox Code Playgroud)

...即使多线程没有这样做......无论如何.

什么是这个问题的最佳解决方案?如何在循环中从集合中删除项而不抛出此异常?

我也在Collection这里使用任意,不一定是ArrayList,所以你不能依赖get.

java iteration collections

1158
推荐指数
12
解决办法
46万
查看次数

如何更新ArrayList中某个位置的元素?

我有一个ArrayList10 String秒.如何5使用其他String值更新索引?

java arraylist

128
推荐指数
4
解决办法
21万
查看次数

Foreach无法操纵String列表?

我在主题上发现了这个主题,我想知道为什么用Java替换List中的值是如此困难.

我的代码看起来像这样丑陋:

    List<String> stringList = new ArrayList<>();
    // ... add some elements
    for (int i = 0; i< stringList.size(); ++i) {
        if (stringList.get(i).contains("%")) {
            stringList.set(i, stringList.get(i).replace("%", backupStorePath));
        }
    }
Run Code Online (Sandbox Code Playgroud)

这真的是唯一的方法吗?为什么我不能使用foreach循环?

for (String command : stringList) {
    command = command.replace("%", backupStorePath);
}
Run Code Online (Sandbox Code Playgroud)

这必须是java的"按值复制"问题而String是不可变的,但为什么它实现了呢?为什么command原始参考的副本而不是原始参考?

java list immutability pass-by-value

3
推荐指数
1
解决办法
172
查看次数