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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 9,870评论 1 14
  • 我最喜欢的一项体育活动是打羽毛球。羽毛球是一个两人或者多人的运动,我最喜欢和爸爸一起打羽毛球。有一次,我和爸爸在打...
    东敏_4ebf阅读 3,564评论 0 0
  • 我们只是时间的过客 的确 人生最大的痛苦 就是心灵没有归属 遇见 便是一份美丽 不觉得花开百日 风光无限 常青树 ...
    石川河女神阅读 1,352评论 0 0