Поскольку вы говорите, что список элементов, из которых можно извлечь эти верхние N, может иметь любой размер и, следовательно, может быть большим, я бы добавил, что приведенные выше простые ответы sort()
(которые вполне подходят для разумно размер ввода), предлагая большую часть работы здесь найти верхний N - тогда сортировка тех N тривиально. То есть:
Queue<Integer> topN = new PriorityQueue<Integer>(n);
for (Integer item : input) {
if (topN.size() < n) {
topN.add(item);
} else if (item > topN.peek()) {
topN.add(item);
topN.poll();
}
}
List<Integer> result = new ArrayList<Integer>(n);
result.addAll(topN);
Collections.sort(result, Collections.reverseOrder());
Куча здесь (мин-куча) по крайней мере ограничена по размеру. Нет никакой необходимости делать кучу из ваших вещей.