2016-04-24 4 views
-1

私はArrayListのの要素を得るための時間を測定します。私はArrayListを使用して、一定の時間内に任意の要素を取得できることを知っています。私はこの記述コードをチェックしようとしましたが、最初の要素に対して間違った結果を返します。は、ArrayListのの最初の要素を取得すると、長い他の要素を取得するよりもかかります

マイコード:

private long getGetTime(int position) { 
    long elapsedTime = 0; 
    long start = System.nanoTime(); 


    list.get(position); 

    long end = System.nanoTime(); 
    elapsedTime = end - start; 

    return elapsedTime; 
} 
preapareStructure(); 
System.out.println("read 0, time: " + getGetTime(0)); 
System.out.println("read size/2, time: " + getGetTime(list.size()/2)); 
System.out.println("read size-1, time: " + getGetTime(list.size()-1)); 

そして、これはこのようなものを返す:

read 0, time: 10243 
read size/2, time: 843 
read size-1, time: 843 

答えて

1

アンArrayListのは、ハードウェアのキャッシュにそれに最初にアクセスした際に購入される補助配列を持っています。したがって、キャッシュは現在ウォームアップされていると見なされます。最初のキャッシュに続くすべてのアクセスがキャッシュから取得されますが、これは明らかに高速です。

+0

それはあなたを助けている場合、答えを受け入れるuser3493289 – akcza

+0

@ありがとう:) – Madhusudhan

+0

さらに重要なのは、コードがはるかに長い時間がかかるどのロードする必要があります。ちょうどそれを書いた値を取得しているので、すでにキャッシュに入っているはずです。 –

関連する問題