具有Queue基本功能的最快的Java集合是什么?

时间:2011-05-25 19:31:49

标签: java performance collections

Java中最快的集合是什么?

我只需要添加和删除操作,顺序并不重要,等于元素不是问题,只不过添加和删除是有意义的。

没有限制大小也很重要。

这些集合中将包含对象。

目前我正在使用ArrayDeque,因为我发现这是更快的Queue实现。

3 个答案:

答案 0 :(得分:81)

ArrayDeque是最好的。请参阅this benchmark,该this blog post来自{{3}}有关此基准测试结果的信息。 ArrayDeque没有LinkedList所做的节点分配的开销,也没有移除ArrayList上移除的数组内容的开销。在基准测试中,对于大型队列,它执行大约 3x 以及LinkedList,对于空队列,它甚至略好于ArrayList。为了获得最佳性能,您可能希望为其提供足够大的初始容量,以保留一次可能保留的元素数量,以避免许多调整大小。

ArrayListLinkedList之间,它似乎取决于队列在任何给定时间将包含的平均元素总数以及LinkedList节拍ArrayList开始约10个元素。

答案 1 :(得分:6)

你可以使用java.util.LinkedList - 它是双重链接和cicrular,所以添加到一端并从另一端获取是O(1)

无论您选择哪种实现,请通过Queue界面引用它,以便您可以轻松更改它,如果结果不适合您的情况(当然,如果队列是您需要的队列)第一名)

更新:Colin的答案显示了一个基准,结论ArrayDeque更好。两者都有O(1)操作,但LinkedList创建新对象(节点),略有性能。由于两者都有O(1)我不认为选择LinkedList会是错误的。

答案 2 :(得分:0)

ConcurrentLinkedDeque是多线程队列的最佳选择