2013-02-28 52 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

相关问题