[英]Java HashMap Removing Key/Value
我只是在尋找解釋和/或洞察為什么更好地迭代HashMap。
例如,下面的代碼(在我看來)完全相同(或應該)。 但是,如果我不迭代HashMap,則不會刪除密鑰。
_adjacentNodes.remove(node);
Iterator<Map.Entry<String, LinkedList<Node>>> iterator = _adjacentNodes.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, LinkedList<Node>> entry = iterator.next();
if(node.getNodeID().contentEquals(entry.getKey())){
iterator.remove();
}
}
到底是怎么回事?
由於您的密鑰是String,因此您應該刪除String而不是Node。 所以試試吧
_adjacentNodes.remove(node.getNodeID());
remove()確實按預期工作。 例如,給定此程序:
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
System.out.println("Before removal");
for( String s : map.keySet() ) {
System.out.println( s );
}
System.out.println("\n\nAfter removal");
map.remove("a");
for( String s : map.keySet() ) {
System.out.println( s );
}
}
}
這將輸出以下內容:
Before removal
b
a
After removal
b
我唯一能想到的錯誤是你在開始時嘗試刪除的節點對象與你從迭代器獲得的節點對象不同。 也就是說,它們具有相同的“NodeID”但是是不同的對象。 也許值得你檢查remove()的返回值。
編輯:哈,我沒有發現字符串/對象的錯誤,但至少我們走的是正確的道路; )
這里的要點是,如果你在遍歷hashmap然后嘗試操作它,它將失敗,因為你不能這樣做(甚至有一個例外)。
因此,您需要使用迭代器來刪除正在迭代的列表中的項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.