Sobes.tech
Назад к вопросам
Senior
4

Какую коллекцию использовать для топ-10 самых дорогих товаров в реальном времени с поддержкой отсортированного списка?

Компании, где спрашивали
IT OneIT One

Ответ от нейросети

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 не позволяет дубликаты по ключу, поэтому потребуется учитывать уникальность элементов.