美文网首页
ArrayList和HashMap的在查找元素上的性能表现

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

作者: 李翾 | 来源:发表于2019-04-03 11:34 被阅读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毫秒以内

    相关文章

      网友评论

          本文标题:ArrayList和HashMap的在查找元素上的性能表现

          本文链接:https://www.haomeiwen.com/subject/kfpabqtx.html