在我的程序中,我经常使用集合来存储对象列表。目前我使用ArrayList来存储对象。 我的问题是:这是最好的选择吗?使用LinkedList可能会更好吗?或其他什么?
要考虑的标准是:
我需要的操作是:
有什么想法吗?
更新:我的选择是: ArrayList :)基于此讨论以及以下内容:
答案 0 :(得分:9)
我总是默认使用ArrayList,在你的情况下也是如此,除非是
关于在第二种情况下应该选择什么,这个SO.com帖子有一些有用的见解:List implementations: does LinkedList really perform so poorly vs. ArrayList and TreeList?
答案 1 :(得分:0)
链接列表更快地添加/删除内部元素(即不是头部或尾部)
Arraylist迭代速度更快
答案 2 :(得分:0)
这是插入与检索优化之间的经典权衡。您描述的任务的共同选择是ArrayList。
答案 3 :(得分:0)
ArrayList
适合您(以及其他大多数)的目的。它具有非常小的内存开销,并且对于大多数操作具有良好的分摊性能。不理想的情况相对罕见:
答案 4 :(得分:0)
如果您只是在列表末尾添加,ArrayList
应该没问题。来自ArrayList
的文档:
除了添加元素具有不变的摊销时间成本这一事实外,未指定增长政策的细节
和ArrayList
也应该使用比链接列表更少的内存,因为您不需要为链接使用空间。
答案 5 :(得分:0)
这取决于您的使用情况。
你是否添加到列表的末尾?两者都很好。
你是否添加到列表的开头? LinkedList对此更好。
您是否需要随机访问(您是否会在其上调用get(n)
)? ArrayList对此更好。
两者都擅长迭代,Iterator实现都是next()
的O(1)。
如果有疑问,请在每个实施中测试您自己的应用并做出自己的选择。
答案 6 :(得分:0)
我知道我迟到了,但也许,this page可以帮助你,不仅是现在,还有将来......
答案 7 :(得分:0)
根据您的标准,您应该使用LinkedList。
LinkedList实现了Deque接口,这意味着它可以在常量时间(1)中添加到列表的开头或结尾。此外,ArrayList和LinkedList都将在(N)时间内迭代。
您不应该仅仅因为列表已满时添加元素的成本而使用ArrayList。在这种情况下,添加元素将是(N),因为正在创建新数组并将所有元素从一个数组复制到另一个数组。
此外,ArrayList将占用更多内存,因为后备阵列的大小可能无法完全填充。