在LinkedHashMap中使用双链接列表而不是单个链接列表

时间:2016-03-08 11:23:57

标签: java linkedhashmap

我知道我的问题与之前发布的问题非常类似。我已经为此发了多篇文章,但答案仍然不太清楚。这就是我再次发帖的原因。

  

为什么Linked HashMap在Single LinkedList上使用双重LinkedList,而order也可以通过Single LinkedList维护。

在上一篇文章的答案中,有人提到LinkedHashMap为删除提供了O(1)复杂性,因为它有前一个和下一个元素指针,但我认为HashMap也提供O(1)删除。

谢谢,

1 个答案:

答案 0 :(得分:5)

  

我认为HashMap还提供O(1)删除

这是真的,但HashMap不必维护密钥的顺序。因此,在删除条目时,只需要修改从中删除条目的存储桶的小链表(在Java 8之前的实现中.Java 8实现使用树),这应该是预期的{{1}时间。

另一方面,

O(1)必须维护将键添加到Map的顺序,它使用包含Map的所有条目的附加链接列表。因此,当您删除条目时,如果您无法访问此大链接列表中的上一个条目,则必须从其开头迭代链接列表,直到找到它为止,这将需要线性时间。

您可以在此处删除条目后查看LinkedHashMap的作用:

LinkedHashMap

这不可能在一个单独链接列表的固定时间内完成。