ArrayList删除错误

时间:2012-06-08 10:21:05

标签: java arraylist iterator is-empty

我正在为学校做一个项目,但我现在有点卡住了

我的问题是我有一个Squares的数组列表 每个Square都有一个值(从0到100)。它的起始值是9999,所以我可以检查它是否被检查。 如果检查了一个正方形,我希望它从arrayList中删除。 所以过了一会儿就没有广场了。

有一些代码可以设置第一个值,这就是我检查值是否为9999的原因。

但是我收到了一个错误。一个我以前没见过的。

线程中的异常“AWT-EventQueue-0”java.util.ConcurrentModificationException

Vak = Square

这是我的代码:

while (!vakken.isEmpty()) { // check if empty
        Iterator itrVak = vakken.iterator();
        while (itrVak.hasNext()) {
            Vak vak = (Vak) itrVak.next(); // here is get the error
            if (vak.getValue() != 9999) {// check if square value is 9999
                Collection checkVakken = vak.getNeighbour().values();
                Iterator itre = checkVakken.iterator();
                while (itre.hasNext()) {
                    Vak nextVak = (Vak) itre.next();
                    if (nextVak != null) {
                        if (nextVak.getValue() == 9999) {
                            nextVak.setValue(vak.getValue() + 1); // set value by its neighbour
                            vakken.remove(vak);
                            checkvakken.add(vak);
                        }
                    }
                }
            } else {
                vakken.remove(vak);
                checkvakken.add(vak);
            }
        }
    }

4 个答案:

答案 0 :(得分:3)

在迭代时,您正在从集合中删除元素。由于迭代器在这种情况下可能会产生不可预测的结果,因此无法快速抛出您遇到的异常。

您只能在遍历它时通过迭代器的方法更改集合。迭代器本身应该有remove方法,它删除当前元素并保持迭代器不变。

答案 1 :(得分:2)

在迭代时,您应该使用Iterator实例来删除对象:

itre.remove();

答案 2 :(得分:1)

您可以尝试这样:

itre.remove();

答案 3 :(得分:0)

ITERATOR永远不会允许你在迭代时进行修改..你需要使用循环代替..这是因为你正在使用迭代器,同时其他线程正在修改列表......