我想使用需要经常排序的数据结构。该数据结构的大小很少超过1000个项目。
哪一个更好 - ArrayList
还是 LinkedList
?
哪种排序算法更好使用?
我想使用需要经常排序的数据结构。该数据结构的大小很少超过1000个项目。
哪一个更好 - ArrayList
还是 LinkedList
?
哪种排序算法更好使用?
在Java 7及之前,使用Collections.sort
将列表的内容转储到数组中没有任何区别。
在Java 8中,使用ArrayList
会稍微更快,因为Collections.sort
将调用List.sort
,而ArrayList
具有专门的版本,可以直接对支持数组进行排序,从而节省一次复制。
因此,ArrayList
更好,因为它提供了类似或更好的性能,具体取决于Java的版本。
java.util.Collections.sort(List)
,那么这并不重要。无论如何,为了排序的目的,列表都将被转储到数组中。如果List
没有实现RandomAccess
,则该列表将被转储到一个List
中。(感谢Ralph让我保持诚实。看起来我混淆了sort和shuffle的实现。它们非常相似,对吧?)只有1000个项目?你为什么在意呢?
除非我有特殊需求,否则我通常都使用ArrayList。
看一下源代码。如果我没记错的话,排序是基于数组的。
如果你只是进行排序而不是动态更新已排序的列表,那么两者都可以,而数组将更加节省内存。如果你想要维护一个有序列表,那么链表确实更好。在链表中快速插入对象到中间位置,但在数组中则较慢。
如果你想在中间位置找到一个对象,那么数组更好。使用数组,你可以进行二进制排序,并在O(logN)时间内查找成员是否在列表中。而在链表中,你需要遍历整个列表,这非常慢。
我猜取决于排序后你想要对列表做什么,哪种方法更好。
O(n)
时间,而在 ArrayList 中则需要 O(log n)
的时间。复杂度相当。实际上,Java 中对链表进行排序(即 Collections.sort()
)之所以能够接受的快,仅仅是因为它将整个链表转储到数组列表中进行排序,然后再将其转储回链表中。 - Mark Peters