用于随机访问和放大的ArrayList与LinkedList;附加-减除

时间:2012-10-20 07:38:36

标签: java collections arraylist linked-list

我精通ArrayList和LinkedList的优点和缺点。当添加和删除较少时,ArrayList是随机访问的首选,反之亦然。如果我需要一个数据结构,我需要同时进行随机访问,并且需要添加&经常从列表中删除项目?

选择哪一个?

2 个答案:

答案 0 :(得分:3)

这些数据结构与API兼容,只需对您的代码进行基准测试/配置文件。

另一个提示:ArrayList假设您执行N次查找和N次突变。这总计为O(N) + O(N * N) <=> O(N^2)复杂度。使用LinkedList,您将获得O(N*N) + O(N) <=> O(N^2)(线性查找时间N +常量时间突变时间N)。因此,两种数据结构都具有可比性。

如果您愿意更深入地了解兔子洞,scala.collection.immutable.Vector有查询和插入/删除的amortized constant cost。它是不可变的,因此线程安全!它是使用下面的一些复杂数据结构实现的。

答案 1 :(得分:1)

如果你想随机访问使用ArrayList,你可以将它用作普通列表并添加/删除项目。

ArrayList的内存以块的形式分配,这些块可能会耗尽内存,除非你的ArrayList变大。

由于你没有提到你是否有任何内存限制(只有约束是随机访问),我会说ArrayList应该满足你的所有需求。