2012-04-25 46 views
-3

我有2個代碼tbat做同樣的事情。我想知道哪一個會更快:這是更快之間splitting/joing收集數組或迭代集合本身

1.

import org.apache.commons.collections.CollectionUtils; 
String [] htArray = StringUtils.join (CollectionUtils.subtract (
    Arrays.asList ((h + " " + t).split (" ")), 
    Arrays.asList (htSelected.split (" "))), " ").split (" "); 
for (String term: htArray) { 
    ... 
} 

2.

import org.apache.commons.collections.CollectionUtils; 
ArrayList <String> htList = null; 
try { 
    htList = (ArrayList <String>) CollectionUtils.subtract (
     Arrays.asList ((h + " " + t).split (" ")), 
     Arrays.asList (htSelected.split (" "))); 
} catch (Exception except) {} 

if (htList != null) { 
    for (String term: htList) { 
     ... 
    } 
} 

一日一加入一個集合,然後拆分成字符串數組。第二個投射集合,嘗試/接着添加一個'if'。哪一個是最優的?

+6

我確信在寫出這個問題,在類似的時間範圍內,您可以自己測試一下。 – 2012-04-25 22:32:22

+0

問題不在於時間框架,而在於時間框架和優雅。如果我們忘記時間框架,哪個邏輯有意義?加入/拆分看起來幾乎是荒謬的(爲什麼加入一個列表並拆分它?),這是我在一位同事向我指出的方法之前使用的方法。在第二種方法中,第二種方法迫使人們編寫許多代碼行,以達到相同的結果。 – 2012-04-26 05:42:40

+0

我引用「我想知道哪一個會更快:」 – 2012-04-26 05:44:00

回答

1

運行100次並找出結果

+2

或100000,並使用currentTimeMillis查看已用時間。 – Vladimir 2012-04-25 22:34:22

+1

這不起作用。您需要非常小心如何對java進行基準測試,以確保測量結果是正確的 - 在課程加載後的穩定狀態性能以及與生產代碼相同的VM設置進行JIT優化。有關Java基準測試陷阱的解釋,請參閱http://www.ibm.com/developerworks/java/library/j-benchmark1/index.html。 – 2012-04-25 22:36:12

+2

@Vladimir,'System.nanoTime'優於'currentTimeMillis',它不保證是[monotonic](http://stackoverflow.com/a/2979239/20394)。 – 2012-04-25 22:36:44