我很难理解这一点。
谷歌搜索,我找到了
" HashMap迭代器必须遍历所有桶,包括 空桶"
和
"在LinkedHashMap中,所有条目都是双重链接的"。
如果是这种情况,为什么唯一的HashMap必须迭代空桶,而不是LinkedHashMap,尽管两者都使用相同的桶概念实现?所有条目在意义上都是双重链接的; 所有桶和元素都是双重链接的"或者只有" 元素是双重链接的"。
请向我提供一个解释LinkedHashMap中双向链接桶实现的图表。
非常感谢提前。
答案 0 :(得分:13)
LinkedHashMap
个桶节点(条目)保留额外的两个指针(before
,after
)以维持订单。
这是创建时的结构。
Map<Integer, String> linkedHashMap = new LinkedHashMap<Integer, String>();
现在让我们添加一个元素。
linkedHashMap.put(1, "obj1");
此处linkedHashMap
标题之前,之后指向条目对象。
让我们添加另一个元素。
linkedHashMap.put(15, "obj15");
检查指针随红色前一状态的变化
让我们再添加一个元素。
linkedHashMap.put(4, "obj4");
当另一个条目插入相同的哈希值时,每个
next
中的和entry
指针形成SingleLikedList
。
答案 1 :(得分:4)
LinkedHashMap
的整个点是要有一个单独的节点链接列表(只有;桶本身没有链接)来迭代,这样你就可以有一个可预测的迭代订购。所以是的,LinkedHashMap
可以更快地迭代。
要回答您的问题“虽然两者都是使用相同的存储桶概念实现的”:HashMap
只有 哈希表,而LinkedHashMap
只有 哈希表和链表;按键查找使用哈希表,迭代使用链表。
与LinkedHashMap
的权衡是你必须保留一个额外的链表(除了HashMap
和LinkedHashMap
都有的哈希表),这是额外的空间使用