ArrayList.sort () vs PriorityQueue

На этот вопрос уже есть ответ:

Всего 2 ответа


Приоритетная очередь не будет сортировать ваши данные. Он просто позволяет вам совершать звонки, чтобы получить свой минимальный элемент. Если вы сделаете это для всех элементов очереди приоритетов, вы в конечном итоге сможете составить список отсортированных элементов. Но опять же, у вас будет пустая очередь приоритетов.

Поэтому, если вам нужно читать вещи «на лету» в любой позиции без изменения структуры данных, очередь приоритетов не для вас.

То, что вы, вероятно, ищете, - это использовать TreeSet / TreeMap, который позволяет сохранять сортировку данных и вставлять / удалять относительно дешево (примерно O (lg n)).


PriorityQueue - это куча min / max - данные не сортируются внутри него; вам всегда нужно будет вызывать poll до тех пор, пока очередь не будет исчерпана, поскольку первый элемент внутри нее всегда является «наименьшим / большим» по вашему Comparator .

Вы действительно ищете TreeSet ; не нужно вызывать sort каждый раз, когда вы вставляете / удаляете элемент.


Есть идеи?

10000