【问题标题】:java.util.ConcurrentModificationException & iteration?java.util.ConcurrentModificationException & 迭代?
【发布时间】:2015-01-14 19:01:37
【问题描述】:

我对 Arraylists 和迭代器非常陌生,这是我第一次遇到这个异常。 我有一个 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

当我稍微搜索一下这个异常时,我发现我无法为数组列表中的每个项删除项目,我需要使用迭代器 但是我很困惑,我必须在哪里以及如何将 while(iter.hasNext()) 和这样的东西放在这段代码中。 如果您能帮助我,我将不胜感激

PS。 s 是字符串(最初为空)& k 是 int

【问题讨论】:

标签: java exception arraylist iterator concurrentmodification


【解决方案1】:

我必须如何准确地放置 while(iter.hasNext())

您可以使用iterator,如下:

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

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

提示:在适用的情况下使用iter.remove()iter.add() 而不是u.remove()u.add()

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

【讨论】:

  • & 然后我的整个如果介于两者之间?!
  • 是的。你的代码在它之间。它在您的代码中充当enhanced for loopreplacement
【解决方案2】:

试试这个:

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);
    }

}

【讨论】:

  • 谢谢,我做到了,但它仍然在行中抛出相同的异常:
  • 字符 currentChar = iter.next();
  • 和另一行我称之为 sovePuzzle 方法
  • 它对我来说很好......你能用你得到的确切堆栈跟踪更新你的帖子吗?
【解决方案3】:

当您使用 foreach 循环时,您正在使用 iterator 隐式

ConcurrentModificationException 发生在集合被“同时”修改时,迭代器以任何方式通过集合(迭代器除外)。

所以,使用迭代器

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2017-06-26
    • 2011-12-27
    相关资源
    最近更新 更多