java.util.ConcurrentModificationException&迭代?

时间:2014-11-17 19:02:42

标签: java exception arraylist iterator concurrentmodification

我对Arraylists& amp;迭代器和这是我第一次遇到这个例外。 我有一个ArrayList u&我想做以下算法:

for (Character c:u){

    if(k==1){           //base case

        if(isAnswer(s+u.get(0)))

            System.out.println(s+u.get(0)+" is the correct sequence."+ '\n');
        return;
    }

    else{
        u.remove(c);
        puzzleSolve(k-1, s+c , u);
        u.add(c);
        removeLastChar(s);
    }

    } //end of for each

当我搜索这个例外时,我发现我无法删除每个arraylist上的iterms weth&我需要使用迭代器 但是,我很困惑,在哪里&我究竟必须把它放在一边(iter.hasNext())&这段代码就是这样的东西。 如果你能帮助我,我将不胜感激。

PS。 s是String(最初为空)& k是int

3 个答案:

答案 0 :(得分:1)

  

我必须把它放在什么时候(iter.hasNext())

您可以使用iterator,如下所示:

Iterator<Character> iter = u.iterator();
while(iter.hasNext())
{
  Character c = iter.next();
  .....
}

使用泛型初始化您的列表:List<Character> u = new ArrayList<Character>();

提示:在适用的地方使用iter.remove()iter.add(),而不是u.remove()u.add()

您需要从这里开始:http://www.tutorialspoint.com/java/java_using_iterator.htm

答案 1 :(得分:1)

试试这个:

Iterator<Character> iter = u.iterator();
while (iter.hasNext())
{
    Character currentChar = iter.next();

    if(k==1){           //base case

        if(isAnswer(s+u.get(0)))

        System.out.println(s+u.get(0)+" is the correct sequence."+ '\n');
        return;
    }

    else{
         iter.remove();
         puzzleSolve(k-1, s+currentChar  , u);
         u.add(currentChar);
         removeLastChar(s);
    }

}

答案 2 :(得分:0)

当您使用 foreach 循环时,您正在隐式使用迭代器

当&#34;同时&#34;修改集合时,会发生

ConcurrentModificationException 。通过迭代器以任何方式通过集合,迭代器除外。

所以,使用迭代器

Iterator<Character> iter = u.iterator();
while (iter.hasNext())

如果您需要在循环中修改集合。