Java - 迭代Hashmap?

时间:2011-10-13 22:19:12

标签: java hashmap

Iterator<Player> iterator = plugin.inreview.keySet().iterator();
while (iterator.hasNext()) {
    Player key = (Player) iterator.next();
    chat.getRecipients().remove(key);
}

抛出:java.util.NoSuchElementException

at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)

有关为何发生这种情况的任何想法?发生这种情况时,地图中有一个键(带有一个值)。

1 个答案:

答案 0 :(得分:1)

我猜您的getRecipients()会返回与plugin.inreview相同的集合!

这意味着您在迭代时尝试从集合中删除元素。这当然很糟糕。

相反,你应该这样做

Vector toRemove=new Vector();
Iterator<Player> iterator = plugin.inreview.keySet().iterator();
while (iterator.hasNext()) {
  Player key = (Player) iterator.next();
  toRemove.add(key);
}
chat.getRecipients().removeAll(toRemove);

另一种可能性是你有几个线程吗?