2014-10-31 81 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