用于搜索的数据结构(不同)整数Java

时间:2011-06-11 15:05:15

标签: java optimization search hashmap standard-library

我正在寻找一种针对搜索操作进行优化的数据结构(在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)

3 个答案:

答案 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)