【发布时间】:2015-04-27 02:24:33
【问题描述】:
在大多数情况下,HashSet 的查找复杂度 O(1)。我知道这是因为对象保存在与对象的哈希码相对应的存储桶中。
当查找完成时,它直接进入桶并找到(如果同一个桶中存在许多对象,则使用equals)元素。
我一直想知道,它是如何直接进入所需的存储桶的?哪种算法用于桶查找?这不会增加总查找时间吗?
【问题讨论】:
-
这个词是“算法”。它来自一个专有名称。缩写是不允许的,确实没有意义。
-
下次会注意的:)
-
基本上,bucket[o.hashCode() % buckets.length].
-
它基本上是从数组中访问索引 i 。所以没有查找时间来达到索引 i。 i 由 hashcode%array.length 计算得出;并且哈希码是从 has 函数计算出来的。虽然它需要一些恒定的时间,并且 O(1) 表示它不依赖于元素的大小。
-
每个答案都提供了更多见解!我不能全部接受:(