删除列表的内容而不迭代

时间:2014-10-31 06:28:52

标签: java arraylist

我在Java中有一个列表,但有一个条件:如果列表大小超过10,那么我可以删除多余的内容而无需迭代,

例如:如果列表包含{1,2,3,4,5,6,7,8,9,10,11,12,13,14},则结果应为

{5,6,7,8,9,10,11,12,13,14}

另外,请注意我使用的Java版本是Java 6。

我尝试使用subList,但即使是此操作也会在内部执行导致性能问题的迭代。

public List<E> subList(int fromIndex,
                       int toIndex)

2 个答案:

答案 0 :(得分:4)

我不清楚为什么你会想要这个,或许你可以通过避免迭代来解释你试图解决的问题是什么? that problem可能是更好的答案。如果您发布SSCCE,我们可以运行它并复制您直接拥有的问题。

您声称ArrayList.subList()会进行迭代,但事实并非如此。正如文档所述:

  

返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图....返回列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中反之亦然。

此函数在O(1)时间内返回现有列表周围的包装器。如果您发现性能问题,几乎肯定不是ArrayList.subList()

答案 1 :(得分:1)

只是你做不到。没有迭代就不可能。获得前n个元素不会导致那么大的性能差异。

subList()方法,内置方法足够优化,不用担心。