В моей реализации я добавляю объекты в PriorityQueue на основе значения параметра a
, который у них есть. Проще говоря, я добавляю элементы в PriorityQueue так, чтобы элементы с наибольшим значением находились перед очередью, используя Comparator.comparingDouble(Object -> -Object.a)
. Всякий раз, когда размер очереди превышает предопределенный порог, я опрашиваю элемент для очереди. Таким образом, очередь будет содержать элементы с наиболее отрицательным значением.
В следующей части моего кода я хочу рассмотреть элементы в очереди в порядке возрастания значения a
, таким образом, обратная очередь к моей очереди в настоящее время.
Какой самый быстрый способ сделать это / какие другие варианты первой части у меня есть?
Далее я разработал небольшой пример, чтобы проиллюстрировать, что я хочу получить. Предположим, у меня есть список из пяти элементов [4,2,7,9,1], и я хочу оставить три самых маленьких. Тогда приоритет будет равен:
- [4]
- [4,2]
- [7,4,2]
- [9 , 7,4,2] -> [7,4,2] после опроса ()
- [7,4,2,1] -> [4,2,1] после опроса ()
Для моей следующей части кода я бы хотел перебрать обратную сторону этой очереди: [1,2,4].
Обратите внимание, что этот пример довольно прост и прост, но в моем коде список может содержать более 1 000 000 элементов.
Я открыт для всех предложений!