对 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
”并没有错,因此,它几乎是无关紧要的。在我看来,subList
由List
定义更为重要。
AFAIK, List
NOT 定义了subList
。因此,让 OP 知道 ArrayList
究竟从哪里继承了该行为的相关性。
@anirvan Sure it does.
@TavianBarnes List
是一个接口,所以我只是暗示它没有实现它,而AbstractList
可以。以上是关于对 Java ArrayList 的一部分进行排序的主要内容,如果未能解决你的问题,请参考以下文章