LinkedHashMap vs HashMap != LinkedList vs ArrayList

2022-09-02 20:03:54

我读过LinkedHashMap比HashMap具有更快的迭代速度,因为它的元素相互加倍链接。此外,因此,在插入或删除元素时,LinkedHashMap的速度较慢。大概是因为这些链接也需要更新。

虽然我可以看到LinkedList与ArrayList的类比,因为LinkedList的元素也是双重链接的,但我读到它的迭代速度比ArrayList,并且具有更快的插入和删除时间。

这是为什么呢?也许我在某个地方犯了一个错误?

干杯!


答案 1

这个类比是行不通的。LinkedList 和 ArrayList 是 List 的两个不相关的实现。然而,LinkedHashMap与HashMap具有相同的数据结构,但其中编织了LinkedList,以使迭代更快,更一致。

LinkedHashMap迭代比HashMap迭代更快的原因是HashMap迭代必须迭代所有存储桶,甚至是空的存储桶。LinkedHashMap有一个指向数据的列表,这意味着它可以跳过空的桶。LinkedHashMap中的列表是一个链接列表,因为删除时间保持不变(如果它是某个arrray支持的列表,则不是O(n)。


答案 2

链接列表迭代运行时(访问每个元素)在“理论上”与数组列表相同。两者都需要 O(n)(Big-O 表示法)运行时。但是,由于数组的内存分配是通过连续的内存块分配的(链接列表元素是单独分配的,并且可能位于内存中的任何位置),因此缓存将生效。