java - LinkedHashMap 与 HashMap != LinkedList 与 ArrayList

标签 java list collections map

我读到 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/

相关文章:

java - JInternalFrame 的内容包装得太紧

java - 未反射(reflect)对 Java 程序的更改

python - 2D Numpy 数组到 Numpy 数组列表

java - XStream 避免收集 xml 元素

java - 查找多个键是否映射到相同的值

java - PhantomJSDriver maven依赖导致 "internal java compiler error"

java - fragment 、AsyncTask 和监听器

python - 我如何映射到字典而不是列表?

c++ - 需要一些方法将函数存储在列表中,然后调用它们

objective-c - 如何向集合添加不透明类型