当HashMap
使用LinkedList
时,两个不同的密钥生成相同的hashCode
。但我想知道是什么让LinkedList
成为List
的其他实现{{1}为什么不ArrayList
,因为ArrayList
在内部使用Array
而arrays
与LinkedList
相比迭代速度更快。
答案 0 :(得分:12)
哈希映射中的冲突是一个例外,而不是规则。当您的哈希函数相当不错时,应该是非常少的冲突。
如果我们使用ArrayList
作为存储桶,大多数列表为空或只有一个元素,这将是一个相当大的资源浪费。如果阵列列表预先分配了多个成员,那么您最终将为未来可能没有的多个冲突付费。
此外,仅当最后一个元素被删除时,从数组列表中删除才是便宜的。当第一个被删除时,你最终会支付所有元素的移动费用。
链接列表没有这些问题。插入是O(1),删除是O(1),并且它们使用与插入时完全相同的节点。 next
/ prior
链接的内存开销并不是为这种便利付出的代价。
答案 1 :(得分:3)
arrayList的问题在于您无法快速删除元素:您必须在删除元素之后移动所有元素。
使用linkedList,删除元素只是将引用从一个节点更改为新的下一个节点,跳过删除的节点。
差异很大。如果您想拥有一个列表并能够快速删除元素,请不要使用arraylist,通常的选择是链接列表。
答案 2 :(得分:3)
为什么不使用ArrayList,因为ArrayList内部使用Array,而且与LinkedList相比,数组的迭代速度更快。
并且ArrayList
要快慢进行修改。所以他们做了一个判断电话,然后和LinkedList
一起去了。