1

プリミティブ [] 配列を受け入れ、並べ替えを実行し、LOW LATENCY (高パフォーマンス) 要件のためにプリミティブ [] 配列を返すインターフェイス メソッドを設計する必要があり、同時に多くのスレッドによって呼び出されます。

非常に高いパフォーマンスを必要とするこの目的には、sorted set または int[] を使用する方がよいでしょうか?

返信をいただければ幸いです

4

2 に答える 2

4

このメソッドは、1 秒あたり 200 万回呼び出される可能性があり、Array.Sort はこれには効率的ではないと確信しています。この配列の最大サイズは 100 要素です

簡単なマイクロ ベンチマークは、100 秒の配列を約 100秒でArrays.sort並べ替えることができることを示しています。標準的なデスクトップ マシン (i7) で、1 つのコアを使用して 1.3 マイクロ秒*。int[]int

したがって、1 秒あたり約 800,000 回呼び出すことができます (ただし、1 つのコアのみを使用すると仮定します)。したがって、プロセッサが 4 つ以上ある場合は、1 秒あたり 200 万回の並べ替え操作を実行できるはずです

注: 配列に典型的な特徴がある場合 (多くの重複がある、ほとんどがソートされている、または数値がすべてかなり狭い範囲にあるなど)、より適したアルゴリズムを見つけることができるかもしれませんが、一般的な使用例では、JDK アルゴがかなり優れていると確信しています。堅牢で効率的。


*マイクロベンチマークの結果 (jmh で実行):

Run result "sort": 1341.298 ±(95%) 11.701 ±(99%) 19.406 nsec/op
Run statistics "sort": min = 1331.329, avg = 1341.298, max = 1352.831, stdev = 9.425
Run confidence intervals "sort": 95% [1329.597, 1352.999], 99% [1321.892, 1360.704]
于 2013-05-17T16:23:47.503 に答える
3

これを試して...

String[] fruits = new String[] {"Pineapple","Apple", "Orange", "Banana"}; 

    Arrays.sort(fruits);

    int i=0;
    for(String temp: fruits){
        System.out.println("fruits " + ++i + " : " + temp);
}

それともこれ...

List<String> fruits = new ArrayList<String>();

    fruits.add("Pineapple");
    fruits.add("Apple");
    fruits.add("Orange");
    fruits.add("Banana");

    Collections.sort(fruits);

    int i=0;
    for(String temp: fruits){
        System.out.println("fruits " + ++i + " : " + temp);
}

これを読む...

于 2013-05-17T15:40:39.187 に答える