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

Why Linkedlist in hashmap?Why not other implementation of List?

当两个不同的键产生相同的 hashCode 时,HashMap 使用 LinkedList。但我想知道是什么让 LinkedList 比其他 LinkedList 的实现更好=14=]。为什么不 ArrayList 因为 ArrayList 在内部使用 Array 并且 arraysLinkedList.

相比有更快的迭代

arrayList 的问题是您不能快速删除一个元素:您必须在删除的元素之后移动所有元素。

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

差别很大。当你想要一个列表并且能够快速删除元素时,不要使用arraylist,通常选择链表。

Why not ArrayList because ArrayList uses Array internally and arrays have a faster iteration compared to a LinkedList.

ArrayList 修改起来。所以他们做出了判断并选择了 LinkedList.

哈希映射中的冲突是一个例外,而不是一个规则。当你的哈希函数相当好时,应该很少有冲突。

如果我们使用 ArrayList 作为桶,大多数列表都是空的或只有一个元素,这将是相当大的资源浪费。使用数组列表预先分配多个成员,您最终会为将来可能不会发生的多次冲突付出代价。

此外,只有当最后一个元素被删除时,从数组列表中删除才便宜。当第一个被删除时,您最终要为所有元素的移动付费。

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