ArrayList或LinkedList更适合排序吗?

时间:2011-11-09 17:57:07

标签: java sorting data-structures

我想要使用需要不时排序的数据结构。数据结构的大小几乎不会超过1000项。

哪一个更好 - ArrayListLinkedList

哪种排序算法更好用?

5 个答案:

答案 0 :(得分:25)

直到Java 7,它没有任何区别,因为Collections.sort会将列表的内容转储到数组中。

使用Java 8,使用ArrayList应该稍快一些,因为Collections.sort会调用List.sortArrayList有一个专门的版本可以直接对支持数组进行排序,从而节省了副本。

因此底线为ArrayList更好,因为它可以提供类似或更好的性能,具体取决于Java的版本。

答案 1 :(得分:8)

如果您要使用java.util.Collections.sort(List),那么它确实无关紧要。

如果List没有实现RandomAccess,那么它将被转储到List 该列表将被转储到数组中以进行排序无论如何。

(谢谢你让我诚实的拉尔夫。看起来我混淆了排序和洗牌的实现。他们对同样的事情足够接近了吗?)

答案 2 :(得分:4)

如果您可以使用Apache库,那么请查看TreeList。它正确地解决了您的问题。

答案 3 :(得分:3)

只有1000件物品?你为什么关心?

我通常总是使用ArrayList,除非我特别需要这样做。

查看源代码。如果我没记错的话,我认为排序是基于数组的。

答案 4 :(得分:1)

如果你只是排序而不是动态更新你的排序列表,那么一个很好,一个数组将更有效的内存。如果要维护排序列表,链接列表确实更好。插入对象很快就会进入链表的中间,但会慢慢进入数组。

如果你想在中间找到一个物体,阵列会更好。使用数组,您可以进行二进制排序,并在O(logN)时间内查找成员是否在列表中。使用链接列表,您需要遍历整个列表,这非常慢。

我认为哪个更适合您的应用程序取决于您在对列表进行排序后要对其执行的操作。