2013-11-06 2 views
0
List<Integer> zmagovalci = new ArrayList<Integer>(); 

if (zmagovalci != null && !zmagovalci.isEmpty()) { 

if (zmagovalci.size() == 1) 

{System.out.println("Zmagal je Tekmovalec " + zmagovalci.get(0) + " " + "("+ 
stTockZmagovalca + " tock" + ")"); 

Этот код возвращает/печатает мне самое большое значение от архаиста. Как я могу напечатать первые три самых больших (по убыванию)?Найти и распечатать первые три самых больших целочисленных значения от arraylist

ответ

2

Если говорить чисто Java, то вы можете достичь его, как так

Collections.sort(zmagovalci); 
Collections.reverse(zmagovalci); 

Для печати наибольшее 3 номера:

for (int i = 0; i < 3; i++) { 
System.out.println(zmagovalci.get(i)); 
} 

Редактировать

Вот как я решил бы это сейчас, используя Java 8:

zmagovalci.stream() 
      .sorted(reverseOrder()) 
      .limit(3) 
      .forEach(System.out::println); 

Java 8 оооочень гораздо приятнее :)

+0

это сортирует его в порядке убывания правой? но как вы «System.out.print» те 3 из arraylist? – NickJ

+0

Я отредактировал свой ответ, чтобы включить печать из самых больших 3 – scalabilitysolved

+0

thanx dude! помог мне :) – NickJ

0

Сортируйте ArrayList, а затем получите первые 3 элемента.

1

Вы пытаетесь выбрать самые большие 3 элемента. Пусть n - количество элементов в списке, а k - количество элементов, которые вы хотите выбрать. Вы можете:

  1. Пройдите через список и отследите 3 самых больших элемента. Простой подход с использованием только трех переменных не очень хорошо масштабируется, но вы можете использовать кучу, чтобы обобщить проблему с хорошей производительностью. Это выполняется в O (n log k).

  2. Отсортировать список в порядке убывания, а затем распечатать первые 3 элемента. Это выполняется в O (n log n + k) вообще.

  3. Внедрите алгоритм выбора, например quickselect, чтобы выбрать самый большой 3. Это более активно, но вы также можете эффективно печатать только 3-й по величине элемент или с 5-го по 7-й и т. Д. Он работает в O (nk).

Смежные вопросы