15. Создать интерфейс с 2 методами. Написать класс, реализующий интерфейс для Integer. В класс можем бесконечно отправлять int-ы. И в любой момент можем вызвать getTopFive() и получить 5 максимальных чисел из тех, что отправили. Можно гуглить. Надо будет запустить, проверить работу #
interface I1{
<T> void putValue(T t);
List<T> getTopFive();
}
Спойлеры к решению
Подсказки
🔹 Нам нужно хранить числа и уметь извлекать 5 максимальных.
🔹 Подойдет
🔹 Размер очереди ограничим 5 элементами, удаляя меньшие значения.
🔹 Используем
🔹 Подойдет
PriorityQueue
, так как это минимальная куча (min-heap).🔹 Размер очереди ограничим 5 элементами, удаляя меньшие значения.
🔹 Используем
List<Integer>
для хранения результатов.Решение
import java.util.*;
interface I1 {
<T> void putValue(T t);
List<Integer> getTopFive();
}
class IntegerTopFive implements I1 {
private final PriorityQueue<Integer> minHeap = new PriorityQueue<>();
@Override
public <T> void putValue(T t) {
if (t instanceof Integer) {
int value = (Integer) t;
minHeap.offer(value);
if (minHeap.size() > 5) {
minHeap.poll(); // Удаляем минимальный элемент, если больше 5
}
} else {
throw new IllegalArgumentException("Only integers are allowed");
}
}
@Override
public List<Integer> getTopFive() {
List<Integer> result = new ArrayList<>(minHeap);
result.sort(Collections.reverseOrder()); // Сортируем по убыванию
return result;
}
public static void main(String[] args) {
IntegerTopFive topFive = new IntegerTopFive();
topFive.putValue(10);
topFive.putValue(5);
topFive.putValue(20);
topFive.putValue(3);
topFive.putValue(8);
topFive.putValue(25);
topFive.putValue(15);
System.out.println(topFive.getTopFive()); // [25, 20, 15, 10, 8]
}
}
📌 Объяснение:
PriorityQueue<Integer>
хранит элементы в отсортированном порядке (минимальный в начале).- Метод
putValue(T t)
принимаетInteger
, добавляет в очередь, а если размер > 5, удаляет минимальный элемент. - Метод
getTopFive()
копирует элементы, сортирует по убыванию и возвращает. - Пример вызова показывает, как корректно хранятся 5 максимальных чисел.
🔥 Преимущества этого решения:
✅ Работает за O(log 5) ≈ O(1) для вставки и O(5 log 5) ≈ O(5) для сортировки.
✅ Поддерживает динамическое обновление максимальных 5 чисел.
🚀 Можно расширить для других типов, но в данном задании требуется Integer
.