【发布时间】:2018-11-28 17:02:08
【问题描述】:
假设我们有两个不同的 hashMap,比如 map1 和 map2。
- map1 有 1000 个条目和 1000 个桶。
- map2 有 999999 个条目和 999999 个桶。
假设我们有一个哈希码为“1234”的对象“obj1”,我们将该对象作为 map1 和 map2 中的键(值为“xyz”)。
在 map2 中查找“obj1”值是否需要更多时间? 从 map1 和 map2 访问 obj1 的时间复杂度仍然是 O(1) 吗?
【问题讨论】:
-
为什么你认为它会有所不同?在给定哈希码的情况下查找哈希桶是模运算和数组访问。如果您使用更大的数字,这些成本都不会更高。显然有更多的因素影响它,比如有多少哈希码冲突(地图中的所有对象都具有相同的哈希码吗?)
-
@Krease - 在 HashMap 中,它创建数组来保存哈希码,我们称它们为 Arrayof HashCodes/Buckets。所以如果我想从那个Array中找到hashcode,我还需要遍历它对吗?
-
您不会“遍历”存储桶数组,而是使用存储桶数量对哈希进行模运算 - 他为您提供了对象所在的存储桶。如果您有 collisions(桶中的多个对象),然后遍历它。不过,您的问题并未说明任何有关碰撞的内容
-
是的。我明白了。你的意思是说“hashcode % sizeOfmap”对吗?
-
是的。
%字符是 Java 中的模运算。
标签: java data-structures hashmap