簡體   English   中英

hashmap中的put方法內的putForNullKey方法有什么作用?

[英]What does `putForNullKey` method do inside the `put` method in hashmap?

今天,我正在修復一個缺陷,發現了一件非常有趣的事情。

我試圖將一個鍵值對放入哈希圖中。 (我當時以為鍵在那里,但后來發現它為空)。

因此,在使用鍵檢索值的同時,我並不是每次都得到null。

后來我發現key為null,我對其進行了更正。

但是然后我看到了Hashmap put方法的Hashmap

keynull時,為什么不給出異常?

它調用putForNullKey私有方法。 它有什么作用?

但我認為如果鍵為null,它應該給一些例外。

為什么他們沒有那樣實現呢? 如果鍵為空,鍵值對沒有用嗎?

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java#HashMap.putForNullKey%28java.lang.Object%29

從HashMap的Javadoc中:

Hash table based implementation of the Map interface.
This implementation provides all of the optional map
operations, and permits null values and the null key

這是設計使然,並已記錄在案。 “為什么”問題很難回答,但是自從引入HashMap(在此之前是Hashtable)以來,就一直是這種方式(實際上,Hashtable不允許使用null)。

至於為什么要擁有putForNullKey,HashMap依賴於鍵的hashCode()來放置它,並且由於無法從null值中獲取hashCode(),因此它必須作為特殊情況來處理。

這是HashtableHashMap之間的區別之一。

Hashtable不允許使用空鍵或空值。 HashMap允許一個空鍵和任意數量的空值。

通常,我們使用空鍵表示默認情況(即,如果不存在給定鍵,則應使用該值)

HashMap僅允許一個空鍵。 因此,每當有人想將某些值放入null時,它都會在put方法內調用putForNullKey方法,而在putForNullKey方法中,它將值置於零索引處。

為了通過空鍵獲取值,它還具有getForNullKey方法,該方法從get方法內部調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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