对 Java ArrayList 的一部分进行排序

Posted

技术标签:

【中文标题】对 Java ArrayList 的一部分进行排序【英文标题】:Sorting a part of Java ArrayList 【发布时间】:2011-07-07 02:23:28 【问题描述】:

仅对 ArrayList 的一部分进行排序的最有效方法是什么? 说一个包含 10 个元素的 Arraylist 中从索引 0 到 3 的所有元素。

Java 中是否有可用的库函数?

除了 Collections.sort(list) 对整个 List 进行排序!

编写高度优化的自定义排序函数需要一些工作。

【问题讨论】:

【参考方案1】:
Collections.sort(list.subList(0,3));

Note: '3' here is excluded from sorting

在documentation中有描述:

公共列表子列表(int fromIndex, int toIndex)

返回此列表在指定之间的部分的视图 fromIndex,包含,toIndex,排除。

【讨论】:

这是一个正确的答案。 Collections.sort 进行就地排序,List.subList 返回一个由原始列表支持的列表。 这个解决方案有一个fencepost错误,因为这个命令实际上会排除索引3中的元素。【参考方案2】:

ArrayList 中使用subList [继承自AbstractList] 方法。然后在该子列表上使用Collections.sort()。也就是说,如果编写高度优化的自定义排序函数确实是一项艰巨的工作

【讨论】:

虽然“继承自AbstractList”并没有错,因此,它几乎是无关紧要的。在我看来,subListList 定义更为重要。 AFAIK, List NOT 定义了subList。因此,让 OP 知道 ArrayList 究竟从哪里继承了该行为的相关性。 @anirvan Sure it does. @TavianBarnes List 是一个接口,所以我只是暗示它没有实现它,而AbstractList 可以。

以上是关于对 Java ArrayList 的一部分进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Java:如何按大小对多个 ArrayList 进行排序?

java - 如何对对象的arraylist进行排序?

java arraylist 按照对象的属性排序

在 Java 8 中使用 Lambda 对 ArrayList 进行排序

Java对ArrayList进行排序

在 Java 中使用时间对 ArrayList 进行排序