哈希表/插入新密钥&值

时间:2013-02-28 14:38:50

标签: java hash time-complexity

据我所知,java中有一个选项可以向HashTable插入一个新密钥。 这完成了:

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

唐纳德是关键,而特朗普就是价值。如果我想将值“TrumpY”添加到“唐纳德”,那么我使用相同的操作:

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

我对此操作的时间复杂性有疑问。据我所知,时间复杂度为O(1)。但这是第一次和第二次操作的相关性吗?因为第一个需要向哈希表添加一个新密钥,第二个需要只添加一个已经存在的密钥值。

2 个答案:

答案 0 :(得分:3)

要查找必须添加值的插槽,Map必须找到此插槽的位置。为此,它使用密钥的哈希码。根据底层实现,可能存在冲突处理(链接),...因此,如果密钥已经存在,则第二个操作通常需要哈希计算的时间+查找+设置值所需。

详细了解该主题:http://en.wikipedia.org/wiki/Hash_table

答案 1 :(得分:0)

首次插入密钥需要更多时间,因为它必须创建java.util.Hashtable.Entry的新实例。

在替换密钥的现有值的情况下,只需将新值分配给现有value实例中的Entry引用。