Java Hashmap bucket可以包含不同的hashcoded对象。如果是,hashmap如何实现O(1)
嗨,我想了解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) 请任何人帮我澄清我的疑问。提前感谢首先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”)意味着它必须
get(Key)
sHashMap
的时间复杂度并不总是O(1)
O(1)
是理想的情况
HashMap
有一个实例数组Entry
。对象的HashCode确定“新条目”应该放在该数组的哪个索引中。如果两个对象必须进入相同的存储桶/索引(如果发生冲突),则使用链接列表
,并将新条目添加到链接列表
。
最坏的情况是,所有条目都可能映射到同一个索引(如果只有一个bucket),时间复杂度将是O(n)
首先get(Key)
sHashMap
的时间复杂度并不总是O(1)
O(1)
是理想的情况
HashMap
有一个实例数组Entry
。对象的HashCode确定“新条目”应该放在该数组的哪个索引中。如果两个对象必须进入相同的存储桶/索引(如果发生冲突),则使用链接列表
,并将新条目添加到链接列表
。
最坏的情况是,所有条目都可能映射到同一个索引(如果只有一个bucket),时间复杂度将是
O(n)
因为hashmap查找算法的工作原理如下:
O(1)
O(1)
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))。