5

ここで、プリミティブ型に「調整されたクイックソート」を使用し、オブジェクトにマージソートを使用する Arrays.sort に関するいくつかのスレッドを読みました。私はそれを証明するためだけに小さなテストを行いましたが、反対に静かであることがわかりました.

            int a[] = new int[50000];
    //Integer a[] = new Integer[50000];

    for(int i=0; i<50000; i++) {
        //a[i] = new Integer(new Random().nextInt(5000)); 
        a[i] = new Random().nextInt(5000);
    }
    System.out.println(System.currentTimeMillis());

    Arrays.sort(a);

    System.out.println(System.currentTimeMillis());

プリミティブ型の配列の場合は 22ms かかりましたが、オブジェクトを含む配列の場合は 98ms かかりました。私のラップトップは、8コアと8GBのRAMを搭載したi7です。間違って実行しましたか?

どうもありがとう!

4

3 に答える 3

0

間違って実行しましたか?

あなたのベンチマークは非常に原始的であり、実際には何も確立していません。各ケースの配列サイズでソート時間はどのように増加しますか? プリミティブの並べ替えとオブジェクトの並べ替えの違いは、プリミティブの比較とオブジェクトの比較のコストの違いによるものでしょうか? (これは、並べ替えアルゴリズムのパフォーマンスとは無関係ですが、テストによる並べ替えアルゴリズムに起因します。)

他の人が指摘しているように、数十ミリ秒程度のタイミングをとる場合は、System.nanoTime;を使用する必要があります。System.currentTimeMillis多くの場合、分解能は 10 ミリ秒以下です。ただし、タイミング テクノロジを変更するだけでは、テストに関するより深刻な問題は解決されません。

于 2013-08-08T17:11:41.587 に答える