2013-05-17 2 views
1

Мне нужно разработать метод интерфейса, который принимает массив примитивов [] и выполняет сортировку и возвращает массив примитивов [] для требования LOW LATENCY (высокая производительность) и будет вызываться многими потоками в в то же времяJava 6 Сортировка массива

Упорядоченный набор или int [] лучше использовать для этой цели, что требует очень высокой производительности?

Был бы признателен любой ответ спасибо

+0

«и будет называться многими нитями, в то же время» не делает никакой разницы в вашем примере. Если вы не имели в виду: метод должен использовать много потоков для повышения производительности. – assylias

+4

Также: что не так с 'Arrays.sort (yourArrayOfInts);'? – assylias

+0

Какие цифры вы ожидаете? Как они распространяются? –

ответ

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); 
} 

Прочитайте это ... QuickSort

+0

В основном этот метод будет вызываться вычислительным механизмом. Этот метод можно назвать так, как говорят 2 миллиона раз в секунду, и я уверен, что Array.Sort неэффективен для этого. Максимальный размер может быть 100 элементов в этом массиве – user2394292

+0

@ user2394292 читать статью ссылки ... –

4

Это метод можно назвать, например, сказать, что 2 миллиона раз pe r second, и я уверен, что Array.Sort неэффективен для этого. Размер может быть не более 100 элементов в этом массиве

Быстрый микро тест показывает, что Arrays.sort может сортировать int[] массив из 100 int с прибл. 1,3 микросекунды * на стандартной настольной машине (i7), используя одно ядро.

Таким образом, вы можете назвать это примерно 800 000 раз в секунду (по-прежнему предполагается, что вы используете только 1 ядро). Итак, , если у вас 4 процессора или более, вы должны иметь возможность запускать 2 миллиона операций сортировки в секунду.

Примечание: если ваши массивы имеют типичную характеристику (скажем, много дубликатов или в основном отсортированы или цифры всего в довольно узком диапазоне), вы можете найти более подходящий алго, но для общего использования. Я уверен, что JDK algo достаточно прочен и эффективен.


* Результаты микро-теста (сделано с 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] 
Смежные вопросы