2013-05-11 661 views
0

我需要實現滑過一個序列的滑動窗口。 (1:[0,1,2,3] 2:[1,2,3,4],...) 哪一個可能會更快? 1.Java List.SubList()性能比較

for each step i; {List=wholeList.sublist(i,i+windowlen)} 

或2

List window=wholeList.sublist(0,window); 
    for each i{ 
    window.remove(0); 
    window.add(i+windowlen); 

}

我用system.currtime bla測量了時間.. + -std SubLists似乎工作得更快..但是爲什麼?我認爲第二個形式給出是O(n)

我需要操作大型數據庫..爲此我需要看看這個..

MFG 月

+1

請編輯您的帖子以格式化兩個代碼替代品。移除步驟是否屬於兩者並不清楚。 – EJP 2013-05-11 00:33:04

+0

1月 - 如果您的問題/代碼顯得太差,我們無法幫助您,因此我們無法弄清楚您正在談論的內容。請修復它。 – 2013-05-11 00:37:29

+1

除了上述內容之外,我想指出的是,根據接口抽象來討論Java數據結構/算法的性能是沒有意義的。你需要提及實際使用的類。他們有着至關重要的不同。 – 2013-05-11 00:41:28

回答

1

假設刪除步驟是唯一的一部分第二步,它們不是等價的,所以比較它們是毫無意義的。第二個修改存在和基礎列表。我懷疑(2)是否會起作用。我認爲沒有任何理由超越(1)。

+0

爲什麼如果我從另一個列表中寫入值,基礎列表會發生變化......或者我應該通過將windowlen-many對象添加到「window-list」來建立初始列表......可能需要很長時間。無論如何,我不得不嘗試與數組一起工作..似乎我真的不明白子列表。代碼非常簡短。 – 2013-05-11 01:01:22

+0

'subList'只是原始列表上的一個窗口,修改它將修改原始列表。 – 2013-05-11 05:50:08

+0

因爲這就是它在[Javadoc](http://docs.oracle.com/javase/7/docs/api/java/util/List.html#subList(int,%20int))中所說的內容:'返回列表由此列表支持,因此返回列表中的非結構性更改會反映在此列表中,反之亦然。 – EJP 2013-05-11 07:48:05