在Java中将列表拆分为两个子列表的最简单,最标准和/或最有效的方法是什么?可以更改原始列表,因此无需复制。方法签名可以是

/** Split a list into two sublists. The original list will be modified to
 * have size i and will contain exactly the same elements at indices 0
 * through i-1 as it had originally; the returned list will have size
 * len-i (where len is the size of the original list before the call)
 * and will have the same elements at indices 0 through len-(i+1) as
 * the original list had at indices i through len-1.
 */
<T> List<T> split(List<T> list, int i);

[EDIT] List.subList返回原始列表上的 View ,如果修改了原始 View ,该 View 将无效。因此,split不能使用subList,除非它也放弃了原始引用(或者,如Marc Novakowski的回答一样,使用subList但立即复制了结果)。

最佳答案

快速半伪代码:

List sub=one.subList(...);
List two=new XxxList(sub);
sub.clear(); // since sub is backed by one, this removes all sub-list items from one

它使用标准的List实现方法,并避免了所有循环运行。 clear()方法还将对大多数列表使用内部removeRange(),并且效率更高。

09-10 08:35
查看更多