2012-09-05 100 views

回答

3

非常慢?你必須要更具體些。下面是總結了100000號的小例子:

final int N = 100000; 

final long startInsert = System.currentTimeMillis(); 

final HashSet<Integer> set = new HashSet<Integer>(N); 
for (int i = 0; i < N; i ++) 
    set.add(i); 
final long stopInsert = System.currentTimeMillis(); 

RootPanel.get().add(new Label(
    "Time to insert: " + (stopInsert - startInsert) + "ms")); 

final long startIterate = System.currentTimeMillis(); 
final Iterator<Integer> iterator = set.iterator(); 

int sum = 0; 
while (iterator.hasNext()) { 
    final Integer integer = iterator.next(); 
    sum += integer; 
} 

final long stopIterate = System.currentTimeMillis(); 
RootPanel.get().add(new Label("Sum: " + sum + 
    ", Time to iterate: " + (stopIterate - startIterate) + "ms")); 

讓我們試試這個對酷睿雙核:

這裏是在Firefox 15(編輯模式)輸出:

Time to insert: 490ms 
Sum: 4999950000, Time to iterate: 766ms 

和Chrome 21 (編譯模式):

Time to insert: 130ms 
Sum: 4999950000, Time to iterate: 105ms 

這比開發模式慢:

的Firefox 15(開發模式):

Time to insert: 16ms 
Sum: 704982704, Time to iterate: 12ms 

Chrome瀏覽器21(開發模式):

Time to insert: 59ms 
Sum: 704982704, Time to iterate: 10ms 

但考慮,這是JavaScript的和Java,結果實際上是相當不錯的。

(順便說一句,如果有人想知道爲什麼總和相比的JavaScript(4999950000在Java中(704982704不同))......這是預期的,見https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsCompatibility#language

+0

我看不到的時間迭代打印。他們是慢的 –

+0

@Erik:我建議你展示一個(簡短)代碼示例。我的意思是,如果您嘗試打印數千行(並且有許多不同的打印方式),那麼我認爲這個問題並沒有真正與迭代器調用相關。 –