Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList还是LinkedList更适合排序?_Java_Sorting_Data Structures - Fatal编程技术网

Java ArrayList还是LinkedList更适合排序?

Java ArrayList还是LinkedList更适合排序?,java,sorting,data-structures,Java,Sorting,Data Structures,我想使用需要时不时地进行排序的数据结构。数据结构的大小几乎不会超过1000项 哪一个更好-ArrayList还是LinkedList 使用哪种排序算法更好?如果只是排序而不是动态更新排序列表,则两者都可以,数组的内存效率更高。如果您想要维护一个排序列表,那么链表确实更好。在链表的中间插入对象速度快,但在数组中插入速度慢 如果你想在中间找到一个对象,数组是更好的。使用数组,您可以进行二进制排序,并在O(logN)时间内查找列表中是否有成员。对于链表,您需要遍历整个列表,这非常缓慢 我想哪一个更适合

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

哪一个更好-
ArrayList
还是
LinkedList


使用哪种排序算法更好?

如果只是排序而不是动态更新排序列表,则两者都可以,数组的内存效率更高。如果您想要维护一个排序列表,那么链表确实更好。在链表的中间插入对象速度快,但在数组中插入速度慢

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


我想哪一个更适合您的应用程序取决于排序后您想对列表做什么。

只有1000个项目?你为什么在乎

我通常总是使用ArrayList,除非我有特殊需要


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

如果你打算使用
java.util.Collections.sort(List)
,那么这真的不重要

如果
列表
没有实现
随机访问
,那么它将被转储到
列表
中。出于排序的目的,列表将被转储到数组中


(谢谢你让我保持诚实Ralph。看起来我把sort和shuffle的实现搞混了。它们非常接近于同一件事,对吧?

如果你能使用Apache库,那就看一看。它正确地解决了您的问题

在Java 7之前,它没有什么区别,因为
Collections.sort
会将列表的内容转储到数组中

对于Java 8,使用
ArrayList
应该会稍微快一点,因为
Collections.sort
将调用
List.sort
,并且
ArrayList
有一个专门的版本,可以直接对备份数组排序,从而保存副本


所以底线是,
ArrayList
更好,因为它根据Java的版本提供类似或更好的性能。

您的假设是什么?当你检验你的假设时,你学到了什么?看看这个,我相信你会自己得出一个结论。当做在您正在考虑的大小,无论是相同的,我100%这将不会是一个瓶颈在您的应用程序。总是自我介绍,看看你发现了什么与你的数据,只有你能做到这一点!堆不是最好的吗?注意:在下面的注释中,海报注释的最大列表大小将来可能会超过1000个项目。在链接列表的中间插入对象很快,但在数组中插入对象很慢。但是,在链表中查找要插入的位置需要
O(n)
时间,而在ArrayList中查找要插入的位置则需要
O(logn)
时间。复杂性是一种冲击。实际上,在Java中对链表进行排序(即,
Collections.sort()
)的唯一原因是可以接受的快,因为它将整个列表转储到数组列表中并对其进行排序,然后将其转储回链表。其复杂性是一个清洗过程,并且内存中的本地访问显著增加(我看到和测试的实验大约为40%)对于大型数据集,速度更快。这不是java文档所说的或实现所做的(或者至少我是这样理解的):JavaDoc“此实现将指定的列表转储到数组中,对数组进行排序,并在列表上迭代重置每个元素”--它转储到数组(而不是列表)中,这样就完成了,不管它是否实现了随机访问。我关心它,因为它不是最终的大小。它可能会随着时间或标准树集的增加而增加,没有额外的依赖项。树集不提供使用索引的访问