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
(谢谢你让我诚实的拉尔夫。看起来我混淆了排序和洗牌的实现。他们足够接近同样的事情吧?)
如果您可以使用Apache库,那么请查看TreeList 。 它正确地解决了您的问题。
只有1000件? 你为什么在乎?
我通常总是使用ArrayList,除非我有特殊需要。
看看源代码。 如果我没记错的话,我认为排序是基于数组的。
如果你只是排序而不是动态更新你的排序列表,那么要么很好,一个数组会更有效。 如果要维护排序列表,链接列表确实更好。 插入对象很快就会进入链表的中间,但会慢慢进入数组。
如果要在中间找到对象,则数组更好。 使用数组,您可以进行二进制排序,并在O(logN)时间内查找成员是否在列表中。 使用链表,您需要遍历整个列表,这非常慢。
我想哪个更适合您的应用程序取决于您在排序后要对列表执行的操作。
- 为什么不扩展JFrame和其他组件?
- 两个短整数的异或
- 从ArrayList中删除元素时出现ConcurrentModificationException
- 改变JComboBox弹出尺寸而不会产生令人不安的外观和感觉?
- 为什么Collectors.toList()不能处理原始集合?
- JdbcTemplate IN子句用于String元素
- 如何在Dropwizard(Jersey)中记录JSON响应
- GWT 2.1 CellTable列标题单击事件
- Spring Batch:org.springframework.batch.item.ReaderNotOpenException:Reader必须先打开才能读取