为什么在hashmap中使用Linkedlist?为什么不执行List的其他实现?

时间:2015-05-23 15:27:05

标签: java arrays linked-list hashmap

HashMap使用LinkedList时,两个不同的密钥生成相同的hashCode。但我想知道是什么让LinkedList成为List的其他实现{{1}为什么不ArrayList,因为ArrayList在内部使用ArrayarraysLinkedList相比迭代速度更快。

3 个答案:

答案 0 :(得分:12)

哈希映射中的冲突是一个例外,而不是规则。当您的哈希函数相当不错时,应该是非常少的冲突。

如果我们使用ArrayList作为存储桶,大多数列表为空或只有一个元素,这将是一个相当大的资源浪费。如果阵列列表预先分配了多个成员,那么您最终将为未来可能没有的多个冲突付费。

此外,仅当最后一个元素被删除时,从数组列表中删除才是便宜的。当第一个被删除时,你最终会支付所有元素的移动费用。

链接列表没有这些问题。插入是O(1),删除是O(1),并且它们使用与插入时完全相同的节点。 next / prior链接的内存开销并不是为这种便利付出的代价。

答案 1 :(得分:3)

arrayList的问题在于您无法快速删除元素:您必须在删除元素之后移动所有元素。

使用linkedList,删除元素只是将引用从一个节点更改为新的下一个节点,跳过删除的节点。

差异很大。如果您想拥有一个列表并能够快速删除元素,请不要使用arraylist,通常的选择是链接列表。

答案 2 :(得分:3)

  

为什么不使用ArrayList,因为ArrayList内部使用Array,而且与LinkedList相比,数组的迭代速度更快。

并且ArrayList要快进行修改。所以他们做了一个判断电话,然后和LinkedList一起去了。