我精通ArrayList和LinkedList的优点和缺点。当添加和删除较少时,ArrayList是随机访问的首选,反之亦然。如果我需要一个数据结构,我需要同时进行随机访问,并且需要添加&经常从列表中删除项目?
选择哪一个?
答案 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应该满足你的所有需求。