[英]What does `putForNullKey` method do inside the `put` method in hashmap?
今天,我正在修復一個缺陷,發現了一件非常有趣的事情。
我試圖將一個鍵值對放入哈希圖中。 (我當時以為鍵在那里,但后來發現它為空)。
因此,在使用鍵檢索值的同時,我並不是每次都得到null。
后來我發現key為null,我對其進行了更正。
但是然后我看到了Hashmap
put
方法的Hashmap
。
當key
為null
時,為什么不給出異常?
它調用putForNullKey
私有方法。 它有什么作用?
但我認為如果鍵為null,它應該給一些例外。
為什么他們沒有那樣實現呢? 如果鍵為空,鍵值對沒有用嗎?
從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(),因此它必須作為特殊情況來處理。
這是Hashtable
和HashMap
之間的區別之一。
Hashtable
不允許使用空鍵或空值。 HashMap
允許一個空鍵和任意數量的空值。
通常,我們使用空鍵表示默認情況(即,如果不存在給定鍵,則應使用該值)
HashMap僅允許一個空鍵。 因此,每當有人想將某些值放入null時,它都會在put方法內調用putForNullKey方法,而在putForNullKey方法中,它將值置於零索引處。
為了通過空鍵獲取值,它還具有getForNullKey方法,該方法從get方法內部調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.