Назад к вопросам
IT One
Senior
4
Какую коллекцию использовать для топ-10 самых дорогих товаров в реальном времени с поддержкой отсортированного списка?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для поддержки топ-10 самых дорогих товаров в реальном времени с отсортированным списком в Java можно использовать структуру данных, которая эффективно поддерживает вставку, удаление и сортировку по цене.
Оптимальным выбором будет PriorityQueue с ограничением размера 10, где при добавлении нового товара проверяется, превышает ли он минимальную цену в очереди. Если да — минимальный элемент удаляется, и новый добавляется. Это позволяет поддерживать топ-10 по цене.
Пример:
PriorityQueue<Product> topProducts = new PriorityQueue<>(10, Comparator.comparingDouble(Product::getPrice));
void addProduct(Product p) {
if (topProducts.size() < 10) {
topProducts.offer(p);
} else if (p.getPrice() > topProducts.peek().getPrice()) {
topProducts.poll();
topProducts.offer(p);
}
}
// Для получения списка в отсортированном порядке (от дорогих к дешевым):
List<Product> sortedTop = new ArrayList<>(topProducts);
sortedTop.sort(Comparator.comparingDouble(Product::getPrice).reversed());
Если нужна более быстрая сортировка и частые обновления, можно рассмотреть TreeSet с кастомным компаратором, но нужно учитывать, что TreeSet не позволяет дубликаты по ключу, поэтому потребуется учитывать уникальность элементов.