Java集合仅针对添加(插入)操作进行了优化



我正在寻找Java集合。我仅有的两个期望是:

  1. 快速O(1)插入/添加操作。

  2. 对这些集合进行迭代的能力。

我不在乎元素的顺序。

  • LinkedList不是最佳候选者,因为(对于每个新节点(有许多小的分配
  • ArrayList不是最佳候选,因为当没有更多空间时内部阵列会调整大小

您能提出针对此类操作优化的其他Java集合吗?

换句话说,我正在寻找LinkedListArrayList之间的混合。类似于LinkedList,其中额外的内存分配是为N个下一个元素预先分配的,而不是像LinkedList那样为每个新元素预先分配。

由于您非常关心内存分配,因此不要使用ArrayListLinkedList,而是使用易于操作和存储大数据的简单数组。

分配具有例如1'000'000个元素的数组的大小:

MyClass[] array = new MyClass[1000000];
  • 将对象分配给数组的索引也会花费O(1)
  • 使用for-loop进行迭代非常简单

如果希望执行其他操作,请使用for-loop迭代。主要缺点是:

  • 声明后固定大小
  • 可以存储单个类型

此外,考虑Stream-API(值得尝试,我不知道这里的性能(:

Arrays.stream(array)...

在LinkedList中,您没有为列表分配新内存,只需对新元素进行引用即可。

LinkedList的工作方式类似于一个链,其中包含对链中上一个/下一个元素的引用。若并没有前面那个意思的元素,那个么这就是第一个元素。若并没有引用下一个元素,这意味着它是列表的最后一个元素。因此,添加新元素只是在"链"的末端创建引用。

它可以快速分配新元素,但如果你想访问,例如列表中的第10个元素,它需要在"链"->上迭代,这意味着它将访问从第一个到第10个的每个元素。与ArrayList相比,这是最大的缺点,在ArrayList中,到达具有指定索引的元素具有O(1(性能。(使用list.get(index(方法(

您有没有想过为java.util.Queue使用队列?

它的插入时间复杂度为O(1(,并且可以使用迭代器进行迭代。

相关内容

  • 没有找到相关文章

最新更新