【发布时间】:2013-02-10 18:45:38
【问题描述】:
我写了一个类来测试arraylist和hashset之间的插入性能,正如我所料,hashset的插入性能会比arraylist好很多(可能是书欺骗了我),但是测试结果让我很困惑
HashSet<String> hashSet = new HashSet<String>();
long start = System.currentTimeMillis();
for (int i = 0; i < 900000; i++) {
hashSet.add(String.valueOf(i));
}
System.out.println("Insert HashSet Time: " + (System.currentTimeMillis() - start));
ArrayList<String> arrayList = new ArrayList<String>();
start = System.currentTimeMillis();
for (int i = 0; i < 900000; i++) {
arrayList.add(String.valueOf(i));
}
System.out.println("Insert ArrayList Time: " + (System.currentTimeMillis() - start));
result:
Insert HashSet Time: 978
Insert ArrayList Time: 287
我多次运行这个主要方法,结果与此没有更多不同,插入arraylist时间比插入hashset时间短得多 谁能解释一下这个奇怪的结果。
【问题讨论】:
-
字符串可能正在进行 JVM 缓存。例如。为 HashSet 创建字符串所花费的时间,然后在 ArrayList 中缓存和重用。如果颠倒顺序(例如先填充 ArrayList,然后填充 HashSet)会得到什么结果?
标签: java performance collections