是否有一种原生或更快的方法来分区java中的列表?

时间:2012-04-29 22:37:19

标签: java partitioning

说我有一个像这样的列表{1,2,3,4,5,6,7,8}。有没有快速的方法来创建两个列表(一个与前半部分,另一个与后半部分)?拆分的位置总是列表大小的一半(列表总是偶数)

目前,我的方法是将大小除以2,然后迭代列表,在list1中添加任何值,并在list2中添加任何内容。我只是想知道是否有更快的方法(我需要做超过十亿的这些,所以即使性能稍有改善也可以节省我很多时间)。

2 个答案:

答案 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(版本和平台)的影响。