【问题标题】:Getting ConcurrentModifcationException even while iterating using iterator [duplicate]即使在使用迭代器进行迭代时也会出现 ConcurrentModifcationException [重复]
【发布时间】:2014-08-14 04:06:18
【问题描述】:

我有以下方法:

//Cleans any stop words at the beginning of the sentence, returns the remaining
//sentence.
public static String cleanBeginning(String sentence, boolean skipEmpty)
{
    List<String> words = Common.getWords(sentence, skipEmpty);
    int i = 0;
    Iterator<String> iterator = words.iterator();
    while (iterator.hasNext() )
    {
        String word = iterator.next();
        if ( stopWords.contains( word.toLowerCase() ) )
        {
            words.remove(i);
            continue;
        }
        break;
    }

    StringBuilder sb = new StringBuilder();
    for (String cleanedWord : words)
    {
        sb.append(cleanedWord ).append(" ");
    }

    return sb.toString().trim();
}

上线: String word = iterator.next();

我收到了java.util.ConcurrentModificationException。这是为什么?我认为iterator.next() 应该是循环遍历数组列表的安全方法?我做错什么了吗?

【问题讨论】:

  • 仅使用迭代器进行迭代是不够的。您也必须通过它进行更改。

标签: java


【解决方案1】:

您需要使用迭代器从集合中删除,而您没有这样做。

变化:

words.remove(i);

到:

iterator.remove();

【讨论】:

  • 谢谢!我总是忘记这样做。
  • @ClickUpvote:不客气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2020-06-20
  • 2018-10-21
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2013-07-15
相关资源
最近更新 更多