我正在寻找一种针对搜索操作进行优化的数据结构(在Java std-lib中)。我必须多次迭代它,控制每个元素并在特殊情况下删除它。我使用了HashMap,但我总是得到以下错误:
for (Edge e : edges) {
if (special case)
edges.remove(e);
}
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:810)
at java.util.HashMap$KeyIterator.next(HashMap.java:845)
at package.name.TFinder.nN(TFinder.java:83)
at package.name.TFinder.fIT(TFinder.java:56)
at package.name.Main.main(Main.java:215)
答案 0 :(得分:4)
根据您的说明,您应该可以使用HashMap
。关键是使用iterator.remove()
删除条目:
for (Iterator<Map.Entry<Key,Value>> it = map.entrySet().iterator(); it.hasNext();)
{
Map.Entry<Key,Value> entry = it.next();
// process the entry
if(need to delete the entry)
{
it.remove();
}
}
答案 1 :(得分:0)
当您在集合中添加/删除(/编辑)某些内容时(例如for循环),会抛出该异常。
要解决此问题,您可以在多线程环境中使用“锁定”。如果你在负责的for循环中做了什么,你可以考虑将你的数据结构复制到辅助(临时),然后只迭代其中一个,并在另一个上执行所有必要的操作。
希望这有帮助!
答案 2 :(得分:0)