2012-06-28 68 views
0

我有關於Java Collection對象的一些問題...關於集合框架

  1. 當我們將對象添加到像HashSetHashMap集合,怎麼物體內部存儲?
  2. 爲什麼Hashtable允許null值?
+0

你的第二個問題的重複:http://stackoverflow.com/questions/7556357/why-does-hashtable-not-take-null-key – assylias

回答

6

你沒有添加對象到集合中。您正在添加參考

至於爲什麼HashTable不允許null鍵和值 - 這只是一個設計決定;在某些情況下,禁止使用空密鑰會很有幫助,而在其他情況下則很煩人。例如,HashMap確實允許空鍵和值。有禁止空各種原因:

  • 通常null鍵空值指示在調用的程序代碼出錯。在插入點拒絕這一點使得發現錯誤比等待代碼獲取值更容易,並且,然後具有意外的空值。

  • 如果您知道,在一個映射值不能爲空,那麼你就需要做一個單獨的支票遏制,然後獲取:您可以獲取,如果結果爲空,你知道鑰匙不見了。

  • 它需要更多的工作來處理地圖實現中的空鍵。雖然空值可以有時是有用的,null鍵幾乎從來沒有是。

+2

只要是明確的,一個流行的原因不允許null鍵或值是因爲它們經常表示正在使用它們的程序中的邏輯錯誤。例如,Guava在Google的代碼庫上進行了一項研究,結果表明95%的集合從來沒有空值(並且拒絕空值可以幫助這些用戶進行調試),5%的集合需要空值(並且通常針對該情況通常有解決方法)。 –

+0

@LouisWasserman:是的 - 將編輯來澄清。 –

+0

公平地說,空密鑰是單數的,因爲在任何給定時間只有一個引用可能被映射爲空值? – corsiKa