我读到 LinkedHashMap 的迭代速度比 HashMap 快,因为它的元素是相互双向链接的。此外,正因为如此,LinkedHashMap 在插入或删除元素时速度较慢。大概是因为这些链接也需要更新。
虽然我可以看到 LinkedList 与 ArrayList 的类比,因为 LinkedList 的元素也是双向链接的,但我读到它比 ArrayList 迭代慢,并且具有更快的插入和删除时间。
这是为什么?也许我在某处犯了错误?
干杯!
最佳答案
这个比喻不成立。 LinkedList 和 ArrayList 是 List 的两个不相关的实现。然而,LinkedHashMap 是与 HashMap 相同的数据结构,但其中编织了一个 LinkedList 以使迭代更快且一致。
LinkedHashMap 迭代比 HashMap 迭代快的原因是 HashMap 迭代必须遍历所有的桶,甚至是空桶。 LinkedHashMap 有一个指向数据的列表这一事实意味着它可以跳过空桶。 LinkedHashMap 中的列表是一个链表,因为删除时间保持不变(而不是 O(n),如果它是某个数组支持的列表)。
关于java - LinkedHashMap 与 HashMap != LinkedList 与 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2404799/