用于搜索(不同)整数的数据结构 Java
我正在寻找一种针对搜索操作进行优化的数据结构(在 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)
I am looking for a data structure, optimized for search-operations (in the Java std-lib). I have to iterate over it several times, control every element and delete it in special cases. I have used a HashMap, but I always get following error:
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)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据您的描述,您应该能够使用
HashMap
来实现此目的。关键是使用 iterator.remove() 来删除条目:From your description, you should be able to use
HashMap
for this. The key is to useiterator.remove()
to delete entries:当您在遍历集合时(例如在 for 循环中)添加/删除(/编辑)集合中的某些内容时,会引发该异常。
为了解决这个问题,您可以在多线程环境中使用“锁”。如果您在负责的 for 循环本身内执行操作,则可以考虑将数据结构复制到辅助(临时)数据结构,然后仅迭代两者之一,并对另一个执行所有必要的操作。
希望这有帮助!
That exception is thrown when you add/remove(/edit) something in a collection while you're terating through it (in e.g. a for loop).
To solve this, you would use a 'lock' in a multi-threaded environment. If you're doing stuff inside the responsible for-loop itself, you can consider copying your datastructure to a secondary (temporary) one, and then iterate on only one of the two and do all the necessary actions on the other.
Hope this helps!
使用 ConcurrentHashMap
Use ConcurrentHashMap