说我有一个像这样的列表{1,2,3,4,5,6,7,8}。有没有快速的方法来创建两个列表(一个与前半部分,另一个与后半部分)?拆分的位置总是列表大小的一半(列表总是偶数)
目前,我的方法是将大小除以2,然后迭代列表,在list1中添加任何值,并在list2中添加任何内容。我只是想知道是否有更快的方法(我需要做超过十亿的这些,所以即使性能稍有改善也可以节省我很多时间)。
答案 0 :(得分:4)
就内置功能而言,您可以使用List#subList(int, int)
:
int size = original.size();
List<Integer> first = original.subList(0, size / 2);
List<Integer> second = original.subList(size / 2, size);
您是否要使用subList()
取决于您对内容的处理方式。 subList()
将视图返回到原始列表(而不是实际复制)。请务必阅读javadoc。这是一个片段:
返回指定列表中此列表部分的视图 fromIndex,inclusive,toIndex,exclusive。 (如果fromIndex和 toIndex相等,返回的列表为空。)返回的列表是 此列表支持,因此返回列表中的非结构更改 反映在此列表中,反之亦然。返回的列表支持 此列表支持的所有可选列表操作。
此外,我无法真正谈及subList()
的表现以及它可能会或可能不符合您的要求。我想是因为它只是创建视图而不是复制它会相对较快。但同样,非常情绪化,你需要以任何一种方式来描述它。
答案 1 :(得分:0)
好的,你必须做十亿以上的游戏 - 好玩。
您应该分析不同的方法。
我的赌注是使用数组和System.arraycopy
如果您的代码不是产生列表的代码,则取决于您提供的List
实现。
如果我们提供有关要求的更多详细信息,您将获得更好的答案。是必要的副本还是视图(由subList()
提供)。您正在使用/提供的List
的哪种实施方式等。
速度也会受到jvm(版本和平台)的影响。