2014-10-31 82 views
0

我在Java中的名单,但有一个条件:如果列表大小超过10,那么我有去除多余的内容出发不反复,删除列表的内容不反复

例如:If列表中包含{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) 
+1

如果不迭代列表,则不能这样做。你不能避免它,甚至不要避免在List类的实现方法中进行内部迭代。 – 2014-10-31 06:29:53

+0

检查此链接:http://stackoverflow.com/questions/4870188/delete-item-from-array-and-shrink-array – user1274820 2014-10-31 06:31:43

+0

“我已经尝试过使用subList,但即使这个操作在内部执行导致性能的迭代问题。” - 您遇到什么性能问题?你有没有做过一些测试,你能提供结果吗?另外,你有没有对备用列表做一些测试?一般来说你是如何做这个测试的? – 2014-10-31 06:33:19

回答

1

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

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

4

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

你声称ArrayList.subList()做迭代,这是不正确的。随着文档状态:

返回指定fromIndex(包括)元素范围为排他性....返回的列表由该列表的支持,因此非结构变化之间的这种列表的该部分的视图返回的列表将反映在此列表中,反之亦然。

该函数返回O(1)时间现有列表的包装。如果您看到性能问题,那几乎肯定不是由于ArrayList.subList()

+1

+1。subList不会在列表上进行任何迭代。 – xpa1492 2014-10-31 07:57:27

+0

即使是这样,迭代速度也很快。在OP的代码中还有其他一些错误(O(n^2)算法,也许?)。 – dimo414 2014-10-31 15:50:01