【发布时间】:2011-03-31 20:48:24
【问题描述】:
可能的重复:
Java: Efficient Equivalent to Removing while Iterating a Collection
Removing items from a collection in java while iterating over it
我正在尝试遍历HashMap:
Map<String, Integer> group0 = new HashMap<String, Integer>();
... 并提取group0 中的每个元素。这是我的方法:
// iterate through all Members in group 0 that have not been assigned yet
for (Map.Entry<String, Integer> entry : group0.entrySet()) {
// determine where to assign 'entry'
iEntryGroup = hasBeenAccusedByGroup(entry.getKey());
if (iEntryGroup == 1) {
assign(entry.getKey(), entry.getValue(), 2);
} else {
assign(entry.getKey(), entry.getValue(), 1);
}
}
这里的问题是每次调用assign()都会从group0中移除元素,从而修改它的大小,从而导致如下错误:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$EntryIterator.next(HashMap.java:834)
at java.util.HashMap$EntryIterator.next(HashMap.java:832)
at liarliar$Bipartite.bipartition(liarliar.java:463)
at liarliar$Bipartite.readFile(liarliar.java:216)
at liarliar.main(liarliar.java:483)
那么...我如何在 group0 动态变化时循环遍历元素?
【问题讨论】:
-
复制 group0 映射并在遍历 group0 时从副本中删除元素?
-
@sarah... 好点。我会试试的。
-
@sarah... 将 group0 复制到克隆 HashMap 给我的问题是,当我从 group0 中删除时,我也会从克隆中删除。我该如何克服呢?如何制作 group0 的独立副本?
-
我以前回答过这个问题。在此处查看接受的答案:stackoverflow.com/questions/223918/…
标签: java exception hashmap concurrentmodification