Java中最快的集合是什么?
我只需要添加和删除操作,顺序并不重要,等于元素不是问题,只不过添加和删除是有意义的。
没有限制大小也很重要。
这些集合中将包含对象。
目前我正在使用ArrayDeque,因为我发现这是更快的Queue实现。
答案 0 :(得分:81)
ArrayDeque
是最好的。请参阅this benchmark,该this blog post来自{{3}}有关此基准测试结果的信息。 ArrayDeque
没有LinkedList
所做的节点分配的开销,也没有移除ArrayList
上移除的数组内容的开销。在基准测试中,对于大型队列,它执行大约 3x 以及LinkedList
,对于空队列,它甚至略好于ArrayList
。为了获得最佳性能,您可能希望为其提供足够大的初始容量,以保留一次可能保留的元素数量,以避免许多调整大小。
在ArrayList
和LinkedList
之间,它似乎取决于队列在任何给定时间将包含的平均元素总数以及LinkedList
节拍ArrayList
开始约10个元素。
答案 1 :(得分:6)
你可以使用java.util.LinkedList
- 它是双重链接和cicrular,所以添加到一端并从另一端获取是O(1)
无论您选择哪种实现,请通过Queue
界面引用它,以便您可以轻松更改它,如果结果不适合您的情况(当然,如果队列是您需要的队列)第一名)
更新:Colin的答案显示了一个基准,结论ArrayDeque
更好。两者都有O(1)操作,但LinkedList
创建新对象(节点),略有性能。由于两者都有O(1)我不认为选择LinkedList
会是错误的。
答案 2 :(得分:0)
ConcurrentLinkedDeque是多线程队列的最佳选择