ArrayList查找代码如下:
List<Hero> heros = new ArrayList<Hero>();
for (int j = 0; j < 2000000; j++) {
Hero h = new Hero("Hero " + j);
heros.add(h);
}
// 进行10次查找,观察大体的平均值
for (int i = 0; i < 10; i++) {
// 打乱heros中元素的顺序
Collections.shuffle(heros);
long start = System.currentTimeMillis();
String target = "Hero 1000000";
for (Hero hero : heros) {
if (hero.name.equals(target)) {
System.out.println("找到了 hero!" );
break;
}
}
long end = System.currentTimeMillis();
long elapsed = end - start;
System.out.println("一共花了:" + elapsed + " 毫秒");
}
结果如下;
找到了 hero!
一共花了:61 毫秒
找到了 hero!
一共花了:64 毫秒
找到了 hero!
一共花了:28 毫秒
找到了 hero!
一共花了:65 毫秒
找到了 hero!
一共花了:82 毫秒
找到了 hero!
一共花了:31 毫秒
找到了 hero!
一共花了:84 毫秒
找到了 hero!
一共花了:23 毫秒
找到了 hero!
一共花了:92 毫秒
找到了 hero!
一共花了:88 毫秒
HashMap查找代码如下:
HashMap<String,Hero> heroMap = new HashMap<String,Hero>();
for (int j = 0; j < 2000000; j++) {
Hero h = new Hero("Hero " + j);
heroMap.put(h.name, h);
}
System.out.println("数据准备完成");
for (int i = 0; i < 10; i++) {
long start = System.currentTimeMillis();
//查找名字是Hero 1000000的对象
Hero target = heroMap.get("Hero 1000000");
System.out.println("找到了 hero!" + target.name);
long end = System.currentTimeMillis();
long elapsed = end - start;
System.out.println("一共花了:" + elapsed + " 毫秒");
}
结果如下;
数据准备完成
找到了 hero!Hero 1000000
一共花了:0 毫秒
找到了 hero!Hero 1000000
一共花了:0 毫秒
找到了 hero!Hero 1000000
一共花了:0 毫秒
找到了 hero!Hero 1000000
一共花了:0 毫秒
找到了 hero!Hero 1000000
一共花了:0 毫秒
找到了 hero!Hero 1000000
一共花了:0 毫秒
找到了 hero!Hero 1000000
一共花了:1 毫秒
找到了 hero!Hero 1000000
一共花了:0 毫秒
找到了 hero!Hero 1000000
一共花了:0 毫秒
找到了 hero!Hero 1000000
一共花了:0 毫秒
可以观察到,几乎不花时间,花费的时间在1毫秒以内
网友评论