2013-02-28 38 views
1

據我所知,java中有一個選項可以將新密鑰插入到HashTable中。 此所做:哈希表/插入一個新的密鑰和值

Hashtable<String,String> hashTable=new Hashtable<String,String>(); 
hashTable.put("Donald", "Trump"); 

唐納德在哪裏是關鍵,而特朗普價值。如果我想添加值「TrumpY」到「唐納德」,比我用的是同樣的操作:

hashTable.put("Donald", "TrumpY"); 

我有一個關於此操作的時間複雜度的問題。據我所知,時間複雜度是O(1)。但這對於第一次和第二次手術是否相關?因爲第一個需要向哈希表中添加一個新的密鑰,第二個需要只爲已經存在的密鑰添加一個值。

+2

第二個操作不會將值添加到已存在的鍵中,它將替換它。 – Perception 2013-02-28 14:43:06

回答

3

要查找必須添加值的插槽,Map必須找到此插槽的位置。要做到這一點,它使用密鑰的哈希碼。取決於底層的實現,可能會有衝突處理(鏈接),...因此,如果密鑰已經存在,第二個操作通常需要哈希計算+查找+設置值所需的時間。

瞭解更多關於該主題:http://en.wikipedia.org/wiki/Hash_table

+0

但是,如果您添加一個新的密鑰(不只是值),它不需要更多的時間? – sssss700121 2013-02-28 14:56:04

+0

如果沒有足夠的空間,則添加新密鑰可能需要更多時間,這取決於底層實施和初始設置(容量,...)。閱讀維基百科文章,您將開始瞭解它是如何工作的。 – 2013-02-28 15:01:14

+0

無論插入還是更新值,在鍵的哈希表中查找正確的插槽在功能上都是相同的。 – RudolphEst 2013-02-28 15:04:10

0

插入首次將要花費更多的時間,因爲它必須創建的java.util.Hashtable.Entry一個新實例的關鍵。

而在替換某個鍵的現有值時,只需將新值分配給已存在的Entry實例中的value引用。

+0

謝謝你,什麼時間複雜java.util.Hashtable中創建一個新的實例。條目? – sssss700121 2013-02-28 14:57:01

+0

或多或少不變(取決於JVM,可用內存,GC ...) – 2013-02-28 15:10:55