在许多语言中,您都可以从哈希表中获取密钥列表。就像java中哈希映射的keySet()方法一样。如何从填充的哈希映射中获取? hashfuction不是不可逆转的吗?您是否也将密钥保存在单独的列表中?
因此,当我使用函数获取填充哈希表中使用的键列表时,该函数的时间复杂度是多少?
对于我的特定问题,我碰巧知道哈希表中的最大条目数。这有帮助吗?
答案 0 :(得分:1)
在任何合理的实现中,按自然顺序触摸所有键(未排序)是O(表的当前大小,包括空插槽)。
在将条目链接在一起的实现中(例如,您在the LinkedHashMap iterator code here中可以观察到的Java),表大小是无关紧要的。该算法遍历链表。
您不需要知道哈希键,因为迭代直接触及数据结构,而不是使用键。
答案 1 :(得分:1)
实际上,除了值之外,每个哈希表都存储密钥。无论如何,这是必要的来解决哈希冲突(在某些情况下,冲突是不可能的,但这需要预先枚举完整的密钥集,因此它不适用于通用哈希表)。也就是说,哈希表{"foo": 1, "bar": 2}
看起来不像这样:
1
2
,而是喜欢这个
("foo", 1)
("bar", 2)
迭代密钥只是迭代哈希表的底层结构。