簡體   English   中英

了解HashMap <K,V>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM