HashMap get()花费的时间第一次更高

时间:2014-07-23 06:15:17

标签: java performance time get hashmap

我一直在使用Java上的HashMap进行一些性能检查。我应该说,结果令人惊讶。我会先显示代码。

    public class HashMapCheck {
    int m_size =10;
    String Keys[], Values[] ;
    void  initKeyValues(int size){
      m_size=size;
      Keys = new String[m_size];
      Values = new String[m_size];
     for(int i=0;i<m_size;i++)
     {
         Keys[i]="key"+i;
         Values[i] ="value"+ i;
     }

    }
    public void  withOutInitialCapacity(){
    long start= System.nanoTime();
    HashMap hm = new HashMap();
    long hmEnd=System.nanoTime();
    long hmPutStart=hmEnd;
     for(int i=0;i<m_size;i++)
     {
        hm.put(Keys[i], Values[i]);
     }
     long hmPutEnd=System.nanoTime();
     long hmGetStart=hmPutEnd;
     hm.get("key5");
     hm.get("key155");
     hm.get("key195");
     //hm.get("key395");
     long hmGetEnd =System.nanoTime();
     long end= hmGetEnd;
     System.out.println("size="+m_size+",total="+(end-start)+",put="+
     (hmPutEnd-    hmPutStart)+",get="+(hmGetEnd-hmGetStart));

}

}

MAIN CLASS

    public class Driver {
    public static void main(String[] args) {
    HashMapCheck hmc = new HashMapCheck();
    hmc.initKeyValues(100);
    hmc.withOutInitialCapacity();

    HashMapCheck hmc2 = new HashMapCheck();
    hmc2.initKeyValues(100);
    hmc2.withOutInitialCapacity();

    HashMapCheck hmc3 = new HashMapCheck();
    hmc3.initKeyValues(100);
    hmc3.withOutInitialCapacity();

    HashMapCheck hmc4 = new HashMapCheck();
    hmc4.initKeyValues(100);
    hmc4.withOutInitialCapacity();

    HashMapCheck hmc5 = new HashMapCheck();
    hmc5.initKeyValues(100);
    hmc5.withOutInitialCapacity();

    HashMapCheck hmc6 = new HashMapCheck();
    hmc6.initKeyValues(100);
    hmc6.withOutInitialCapacity();
    }
    }

好的我正在测量在散列图中放入100个值并从中获取3个值所花费的时间。现在问题就出现了。

1)我首先尝试使用上面的函数,其中1个值(key5)在hashMap中,2个值(key155,key195)在hashmap中不存在。以下是结果 size = 100,total = 80446,put = 69190,get = 6290 size = 100,total = 69852,put = 63893,get = 2317 size = 100,total = 69852,put = 62900,get = 3972 size = 100,total = 68859,放= 64224,GET = 1656 size = 100,total = 69190,put = 63562,get = 1655 size = 100,total = 67866,put = 63562,get = 1324 正如你所看到的那样get()时间在第3和第一时间高于所有其他时间,总数也高于第一

2)这次我尝试对withoutInitialCapacity()做了一些小改动。这次我使用hm.get(&#34; key5&#34;); hm.get(&#34; key45&#34); hm.get(&#34; key195&#34); 因此,hashMap中有两个值,一个值不是。结果是

size=100,total=80777,put=68859,get=6952 size=100,total=73825,put=63893,get=5959
size=100,total=82763,put=78459,get=1324 size=100,total=70845,put=66210,get=1656
size=100,total=70845,put=64886,get=1655 size=100,total=69190,put=64886,get=1324
1st and second get has a high value. 

为什么会这样?是JIT吗?

0 个答案:

没有答案