【发布时间】:2015-10-03 19:44:16
【问题描述】:
我尝试构建自己的 Map 以提高特殊环境的性能,并且我意识到一些非常有趣的事情:创建 new Hashmap<Integer,String>(2000) 比 new Object[2000] 快 - 无论我以什么顺序执行这些命令。这让我很困惑,尤其是。因为Hashmap构造函数包含table = new Entry[capacity],根据this。我的测试台有问题吗?
public static void test(int amm){ //amm=1_000_000
Map<Integer,String> m1 = null;
Object[] arr = null;
long time = System.nanoTime();
for(int i = 0; i < amm; i++){
m1 = new HashMap<Integer, String>(2000);
}
System.out.println("m1: " + (System.nanoTime() - time)); //m1: 70_455_065
time = System.nanoTime();
for(int i = 0; i < amm; i++){
arr = new Object[2000];
}
System.out.println("arr: " + (System.nanoTime() - time)); //arr: 1_322_473_803
}
我很想看看在另一台计算机上的测试结果。我不知道为什么创建 HashMap 比创建 Object[] 快 10 倍。
【问题讨论】:
-
这取决于JDK的实现。您使用哪个 JDK 和版本来执行此测试?
-
@BladeCoder 我根据 java.version 使用 1.7.0_79 (IceTea 2.5.5) (7u79-2.5.5-0ubuntu0.14.04.2)。
-
确实在 OpenJDK 1.7 的封闭版本中,HashMap 的构造函数中没有初始化数组(它在第一次插入时完成),这解释了速度差距:grepcode.com/file_/repository.grepcode.com/java/root/jdk/…
标签: java arrays performance hashmap