【发布时间】:2026-01-26 11:20:05
【问题描述】:
我正在寻找 Java 集合。我仅有的两个期望是:
快速
O(1)插入/添加操作。迭代此集合的能力。
我不关心元素顺序。
-
LinkedList不是最佳候选,因为有很多小分配(对于每个新节点)。 -
ArrayList不是最佳候选者,因为当没有更多空间时,内部数组会调整大小。
您能否提出针对此类操作优化的其他 Java 集合?
换句话说,我正在寻找LinkedList 和ArrayList 之间的混合体。像LinkedList 这样的东西,额外的内存分配是为下一个 N 元素预先分配的——而不是像 LinkedList 这样的每个新元素。
【问题讨论】:
-
你需要重复这个集合吗?如果你不关心重复,你可以使用 HashSet。
-
@Lorelorelore:是的,我关心重复。
-
您可以拥有一个 ArrayList 的 LinkedList 并使用
Stream.flatMap对其进行迭代 -
如果您在开始添加之前知道大致长度,那么 ArrayList 可能会很好,因为您可以使用 .ensureCapacity()。但是,如果你在中间插入,你仍然需要移位,如果你真的想要 O(1) 插入,你可以使用 HashMap 或 ManyValuesMap (基本上是 Map
> (iirc guava 有好的实现)如果顺序很重要,你也可以选择二叉树,但插入不会像 map 方法那么快 -
@PeterLawrey:据我所知
Stream.flatMap会在这里完成这项工作,但是:* 对于这个问题来说,这看起来有点矫枉过正 :) * 我不知道这种解决方案的性能如何.需要执行一些性能测量来资产运行时性能。
标签: java list arraylist collections linked-list