Java Hashmap bucket可以包含不同的hashcoded对象。如果是,hashmap如何实现O(1)

Java Hashmap bucket可以包含不同的hashcoded对象。如果是,hashmap如何实现O(1),java,hashmap,time-complexity,hashcode,Java,Hashmap,Time Complexity,Hashcode,嗨,我想了解hashmap是如何工作的。Hashmap基于hasing原理工作 我的疑问是,在同一个bucket中是否可能包含不同的hashcoded对象?如果可能,表示获取(键)如何达到O(1)时间?因为基于哈希代码和哈希,将找到Bucket。但我们必须正确地迭代元素。那么它将是怎样的O(1) 例如 我的桶是4号的 我将放置元素“X”(hashcode-3)、“Y”(hashcode-7)、“Z”(hashcode-11)。所有这三个要素的铲斗位置均为3。如果我调用get(“Z”)意味着它必须

嗨,我想了解hashmap是如何工作的。Hashmap基于hasing原理工作

我的疑问是,在同一个bucket中是否可能包含不同的hashcoded对象?如果可能,表示获取(键)如何达到O(1)时间?因为基于哈希代码和哈希,将找到Bucket。但我们必须正确地迭代元素。那么它将是怎样的O(1)

例如 我的桶是4号的 我将放置元素“X”(hashcode-3)、“Y”(hashcode-7)、“Z”(hashcode-11)。所有这三个要素的铲斗位置均为3。如果我调用get(“Z”)意味着它必须遍历bucket中的元素,那么只有它才能找到。那么它将是O(1)

请任何人帮我澄清我的疑问。提前感谢首先
get(Key)
s
HashMap
的时间复杂度并不总是
O(1)
O(1)
是理想的情况

HashMap
有一个实例数组
Entry
。对象的HashCode确定“新条目”应该放在该数组的哪个索引中。如果两个对象必须进入相同的存储桶/索引(如果发生冲突),则使用
链接列表
,并将新条目添加到
链接列表
。 最坏的情况是,所有条目都可能映射到同一个索引(如果只有一个bucket),时间复杂度将是
O(n)

首先
get(Key)
s
HashMap
的时间复杂度并不总是
O(1)
O(1)
是理想的情况

HashMap
有一个实例数组
Entry
。对象的HashCode确定“新条目”应该放在该数组的哪个索引中。如果两个对象必须进入相同的存储桶/索引(如果发生冲突),则使用
链接列表
,并将新条目添加到
链接列表

最坏的情况是,所有条目都可能映射到同一个索引(如果只有一个bucket),时间复杂度将是
O(n)

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

  • 从对象派生一个整数散列值-
    O(1)
  • 找到该散列的存储桶-
    O(1)
  • 在该bucket中查找对象-
    O(该bucket中冲突的哈希数)

  • 尽管在极端情况下(例如我们只有一个存储桶),该存储桶中冲突哈希的
    数量可以朝
    n
    方向增加,但在推导算法的
    O
    时,不考虑这些情况。此值被认为是
    1
    ,因为在正常情况下,增加
    n
    不会影响其成本。

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

  • 从对象派生一个整数散列值-
    O(1)
  • 找到该散列的存储桶-
    O(1)
  • 在该bucket中查找对象-
    O(该bucket中冲突的哈希数)

  • 尽管在极端情况下(例如我们只有一个存储桶),该存储桶中冲突哈希的
    数量可以朝
    n
    方向增加,但在推导算法的
    O
    时,不考虑这些情况。这个值被认为是
    1
    ,因为在正常的情况下,增加
    n
    不会影响它的成本。

    从Java8开始,如果特定的bucket包含8个或更多节点,则链表将转换为树。从Java8开始,如果特定的bucket包含8个或更多节点,那么链表将转换为树。那么时间复杂度将是O(log(n))。