获取哈希表中的键列表的时间复杂度?

时间:2013-12-14 16:19:40

标签: performance hash hashmap hashtable time-complexity

在许多语言中,您都可以从哈希表中获取密钥列表。就像java中哈希映射的keySet()方法一样。如何从填充的哈希映射中获取? hashfuction不是不可逆转的吗?您是否也将密钥保存在单独的列表中?

因此,当我使用函数获取填充哈希表中使用的键列表时,该函数的时间复杂度是多少?

对于我的特定问题,我碰巧知道哈希表中的最大条目数。这有帮助吗?

2 个答案:

答案 0 :(得分:1)

在任何合理的实现中,按自然顺序触摸所有键(未排序)是O(表的当前大小,包括空插槽)。

在将条目链接在一起的实现中(例如,您在the LinkedHashMap iterator code here中可以观察到的Java),表大小是无关紧要的。该算法遍历链表。

您不需要知道哈希键,因为迭代直接触及数据结构,而不是使用键。

答案 1 :(得分:1)

实际上,除了值之外,每个哈希表都存储密钥。无论如何,这是必要的来解决哈希冲突(在某些情况下,冲突是不可能的,但这需要预先枚举完整的密钥集,因此它不适用于通用哈希表)。也就是说,哈希表{"foo": 1, "bar": 2}看起来不像这样:

1
2

,而是喜欢这个

("foo", 1)
("bar", 2)

迭代密钥只是迭代哈希表的底层结构。

相关问题