Possible Duplicates:
Java: Efficient Equivalent to Removing while Iterating a Collection
Removing items from a collection in java while iterating over it如何在Java中修改對象時迭代對象?
我通過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時從副本中刪除元素? – sarahTheButterFly 2010-08-18 23:57:46
@sarah ...好點。我會嘗試的。 – Hristo 2010-08-19 00:01:35
@sarah ...通過group0複製到一個克隆HashMap給我的問題是,當我從group0中刪除時,我也從克隆中刪除。我如何克服這一點?我如何製作group0的獨立副本? – Hristo 2010-08-19 00:10:35