Hashmap存储桶可以包含不同的哈希编码对象。如果是这样,hashmap如何实现O(1)

时间:2015-11-18 11:15:03

标签: java hashmap time-complexity hashcode

您好我正在尝试了解hashmap的工作原理。 Hashmap基于哈希原理工作。

我怀疑我是否可以在同一个桶中包含不同的哈希编码对象?如果可能意味着获得(关键)如何实现O(1)时间?因为基于哈希码和散列,将找到Bucket。但是必须正确地迭代元素。那么它将如何成为O(1)。

例如 我的水桶尺寸是4 我将把元素“X”(哈希码-3),“Y”(哈希码 - 7),“Z”(哈希码 - 11)。所有这三个元素的桶位置都是3。如果我正在调用get(“Z”)意味着它必须遍历存储桶中的元素,那么只有它才能找到。那么它将如何成为O(1)。

请有人帮我清除疑虑。在此先感谢

2 个答案:

答案 0 :(得分:4)

因为hashmap查找算法的工作原理如下:

  1. 从对象中导出整数哈希值 - O(1)
  2. 找到该哈希的存储分区 - O(1)
  3. 在该存储桶中查找对象 - O(number of collided hashes in that bucket)
  4. 虽然在极端情况下number of collided hashes in that bucket可能会增加n(例如我们只有一个存储桶),但在导出O时不考虑这些情况算法的问题。此值被视为1,因为在正常情况下,增加n不会影响其成本。

答案 1 :(得分:0)

首先,get(Key)的{​​{1}} 时间复杂度并不总是HashMapO(1)是理想的情况。

O(1)有一个实例数组HashMap。对象的HashCode确定该数组的哪个索引应该是“新条目”。如果2个对象必须进入相同的存储桶/索引(如果存在冲突),则使用Entry并将新条目添加到LinkedList。 最坏的情况是,所有企业都可以映射到相同的索引(如果只有一个存储桶),时间复杂度将为LinkedList