[英]Delete an entry in hashmap while iterating
我有一個循環來迭代 hashmap。 如果滿足條件,我需要從 hashmap 中刪除鍵值對。 我無法使用下面的代碼來做到這一點。 我怎樣才能做到這一點?
for(HashMap.Entry<Integer,Character> m:commons.entrySet()){
while(i!=(int)m.getKey()){
i++;
}
if(s2.charAt(i)!=(int)m.getKey()){
commons.remove((int)m.getKey());
}
}
for (Iterator<Map.Entry<Integer, Character>> it = map.entrySet().iterator(); it.hasNext(); ) {
Map.Entry<Integer, Character> entry = it.next();
// casting to int is redundant in your code. I removed it.
while (i != entry.getKey()) i++;
if (s2.charAt(i) != entry.getKey()) {
it.remove();
}
}
您可以在迭代Map
時使用Iterator
安全刪除。
您還可以查看.removeIf()
(Java 8+),但是在迭代中使用循環,這更具可讀性,imo。
ConcurrentModificationException
。 您應該使用內部使用Iterator
的Iterator
或Collection::removeIf 。 盡管您可以將char
與int
進行比較,但可能您在比較中混淆了鍵和值。 你寫
if(s2.charAt(i).=(int)m.getKey())
您在其中將s2.charAt(i)
與密鑰進行比較,該密鑰是Integer
。 從語法上講,它是正確的,但可能您想比較值(這是一個Characater
),即您很可能想要做
if(s2.charAt(i).=(int)m.getValue())
執行以下操作:
for (Iterator<Entry<Integer, Character>> itr = commons.entrySet().iterator(); itr.hasNext();) {
Entry<Integer, Character> entry = itr.next();
while (i != entry.getKey()) {
i++;
}
if (s2.charAt(i) != entry.getValue()) {
itr.remove();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.