您好我正在尝试了解hashmap的工作原理。 Hashmap基于哈希原理工作。
我怀疑我是否可以在同一个桶中包含不同的哈希编码对象?如果可能意味着获得(关键)如何实现O(1)时间?因为基于哈希码和散列,将找到Bucket。但是必须正确地迭代元素。那么它将如何成为O(1)。
例如 我的水桶尺寸是4 我将把元素“X”(哈希码-3),“Y”(哈希码 - 7),“Z”(哈希码 - 11)。所有这三个元素的桶位置都是3。如果我正在调用get(“Z”)意味着它必须遍历存储桶中的元素,那么只有它才能找到。那么它将如何成为O(1)。
请有人帮我清除疑虑。在此先感谢
答案 0 :(得分:4)
因为hashmap查找算法的工作原理如下:
O(1)
O(1)
O(number of collided hashes in that bucket)
虽然在极端情况下number of collided hashes in that bucket
可能会增加n
(例如我们只有一个存储桶),但在导出O
时不考虑这些情况算法的问题。此值被视为1
,因为在正常情况下,增加n
不会影响其成本。
答案 1 :(得分:0)
首先,get(Key)
的{{1}} 时间复杂度并不总是HashMap
。 O(1)
是理想的情况。
O(1)
有一个实例数组HashMap
。对象的HashCode确定该数组的哪个索引应该是“新条目”。如果2个对象必须进入相同的存储桶/索引(如果存在冲突),则使用Entry
并将新条目添加到LinkedList
。
最坏的情况是,所有企业都可以映射到相同的索引(如果只有一个存储桶),时间复杂度将为LinkedList
。