ArrayList和HashMap的在查找元素上的性能表现

2019-04-03  本文已影响0人  李翾

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毫秒以内

上一篇下一篇

猜你喜欢

热点阅读