Javascript Gwt HashSet和HashMap迭代器函数非常慢

Javascript Gwt HashSet和HashMap迭代器函数非常慢,javascript,gwt,Javascript,Gwt,GWT为HashMap.iterator()和HashSet.iterator()生成的javascript代码非常慢。有没有办法加快速度?非常非常慢?你必须更具体一点。下面是一个总结100000个数字的小例子: final int N = 100000; final long startInsert = System.currentTimeMillis(); final HashSet<Integer> set = new HashSet<Integer>(N);

GWT为
HashMap.iterator()和
HashSet.iterator()生成的javascript代码非常慢。有没有办法加快速度?

非常非常慢?你必须更具体一点。下面是一个总结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"));
和Chrome 21(编译模式):

这比在开发模式下慢:

Time to insert: 16ms
Sum: 704982704, Time to iterate: 12ms
Time to insert: 59ms
Sum: 704982704, Time to iterate: 10ms
Firefox 15(开发模式):

Chrome 21(开发模式):

但是考虑到这是JavaScript对Java,结果实际上相当不错


(顺便说一句,如果有人想知道为什么Java(704982704)与JavaScript(4999950000)的总和不同……这是意料之中的,请参见)

我看不到重复打印的时间。他们是最慢的ones@Erik:我建议您展示一个(简短的)代码示例。我的意思是,如果您试图打印数千行(并且有许多不同的打印方式),那么我假设问题实际上与迭代器调用无关。
Time to insert: 16ms
Sum: 704982704, Time to iterate: 12ms
Time to insert: 59ms
Sum: 704982704, Time to iterate: 10ms