双迭代器循环

wol*_*lfd 3 java iterator linked-list list

所以我在我的代码中有这个循环,需要两个单独工作的迭代器.但是,当它尝试使用rbIterator.next()时,java会抛出ConcurrentModificationException.我如何阻止这种情况发生?谢谢

Iterator<Road> raIterator = roads.listIterator(0); //I also tried .iterator(), with no avail
while(raIterator.hasNext()){
    Road ra = raIterator.next();
    Iterator<Road> rbIterator = roads.listIterator(0);
    while(rbIterator.hasNext()){
        Road rb = rbIterator.next();
        //snipped code that adds a road to the list
        roads.add(xyz);
    }
}
Run Code Online (Sandbox Code Playgroud)

ty1*_*824 6

List除非您创建允许它的实现,否则在迭代它们时,您无法将项添加到大多数标准实现中!

ArrayList但是,不会看到javadoc.大多数*(可能全部)Java Collections Frameworks List实现也没有.

一个解决方案是创建一个新列表,temp在迭代之前,在迭代时添加元素temp,然后将所有元素添加temp到第一个中.

编辑:使用addAll(temp),谢谢@Michael Easter

List<Road> temp = new ArrayList<Road>();

for(Road ra : roads){
    for (Road rb : roads){
        temp.add(xyz);
    }
}

roads.addAll(temp);
Run Code Online (Sandbox Code Playgroud)

  • 建议编辑只是"roads.addAll(temp);" 而不是第二个循环 (3认同)