[英]Understanding HashMap<K,V>
好的,這是我不明白的一點。
如果嘗試使用get()
方法檢索對象並返回null,則仍可能將null
存儲為與提供給get()
方法的鍵關聯的對象。 您可以通過將對象的鍵傳遞給map的containsKey()
方法來確定是否是這種情況。 如果鍵存儲在地圖中,則返回true
那么, containsKey()
應該如何告訴我與提供的密鑰相關的值是否為null
?
如果你想檢查,這是參考 。 第553頁
Map<String, Object> map = new HashMap<String, Object>();
map.put("Foo", null);
System.out.println(map.containsKey("Foo"));
System.out.println(map.containsKey("Boo"));
OUTPUT:
true
false
get()
在兩種情況下返回null
:
null
。 你不能告訴get()
這是真的。 但是, containsKey()
將告訴您密鑰是否存在於映射中,無論其關聯值是否為null
。
考慮一下這段簡單的代碼:
Map<String, String> m = new HashMap<String, String>();
m.put("key1", "value1");
m.put("key2", null);
System.out.println("m.get(\"key1\")=" + m.get("key1"));
System.out.println("m.containsKey(\"key1\")=" + m.containsKey("key1"));
System.out.println("m.get(\"key2\")=" + m.get("key2"));
System.out.println("m.containsKey(\"key2\")=" + m.containsKey("key2"));
System.out.println("m.get(\"key3\")=" + m.get("key3"));
System.out.println("m.containsKey(\"key3\")=" + m.containsKey("key3"));
如您所見,我在地圖中放入了兩個值,其中一個值為null。 Thene我向地圖詢問了三個值:其中兩個存在(一個為空),一個不存在。 看看結果:
m.get("key1")=value1
m.containsKey("key1")=true
m.get("key2")=null
m.containsKey("key2")=true
m.get("key3")=null
m.containsKey("key3")=false
第二個和第三個是棘手的部分。 key2
以null值存在,因此,使用get()
您無法區分元素是否不在地圖中,或者是否在地圖中具有null
值。 但是,使用containsKey()
可以,因為它返回一個boolean
。
(get() == null && containsKey()) == value is null
containsKey會告訴你密鑰是否在hashmap中。 考慮一個鍵存在空值的情況和另一種情況,其中您要查找的鍵在hashmap中根本不存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.