java为什么我们需要LinkedHashMap中的hashcode和bucket
最近,我在java
中讨论了Map
接口的实现。我明白了HashMap
,一切都有道理。
但是说到LinkedHashMap
,据我目前所知,条目有key
、value
、before
和after
。其中,before和after跟踪插入顺序
然而,在LinkedHashMaps
中使用hashcode
和bucket概念对我来说没有意义
I went through this article for understanding implementation of linkedHashMaps
有人能解释一下吗?我的意思是为什么我们把入口节点放在哪个桶里很重要。事实上,为什么水桶的概念放在首位。?为什么不简单地列出两份清单呢
# 1 楼答案
LinkedHashMap
仍然是HashMap
的一种类型。它使用与HashMap
相同的逻辑来查找密钥所属的bucket(在get()
、put()
、containsKey()
等方法中使用)。hashCode()
用于定位该存储桶。这种逻辑对于这些操作的预期性能至关重要添加的
LinkedHashMap
(使用before
和after
引用)功能仅用于根据插入顺序迭代条目,因此它会影响keySet()
,entrySet()
返回的Collection
的迭代器values()
方法。它不影响条目的存储位置如果没有hashcode和bucket,
LinkedHashMap
将无法在O(1)
的预期时间内Map
查找键