Существует ли Очередь (PriorityQueue) реализация, которая является также Набором?

Существуют некоторые случаи, где это имеет смысл к нулевым ссылкам. Например, когда Вы пишете набор - как приоритетная очередь - и согласно Вашему контракту, Вы не должны поддерживать те объекты для клиента после того, как клиент удалил их из очереди.

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

На целом, Вы действительно не должны беспокоиться. Позвольте компилятору, и GC делают их работы, таким образом, можно сделать Ваши.

9
задан Mauli 10 December 2009 в 08:51
поделиться

3 ответа

Если достаточно иметь очередь с поведением, подобным Set, если вы просто не хотите принимать повторяющиеся записи, то я думаю, что простым решением может быть создание подкласса PriorityQueue и переопределите методы add () , addAll () и offer () , например:

@Override
public boolean offer(E e) {
  if (contains(e)) {
    return false; 
  } else {
    return super.offer(e);
  }
}

BTW - добавить () вызывает offer () внутри, так что, может быть, даже достаточно просто переопределить метод offer () и выполнить там проверку.

6
ответ дан 4 December 2019 в 21:10
поделиться

Вероятно, вам стоит узнать больше об объектно-ориентированном программировании. Вот хороший учебник, основанный на Python:

Учебник ООП в Python

Объектно-ориентированное программирование - это способ организовать ваши программы таким образом, чтобы они отражали элементы проблемы, которую вы пытаетесь решить.

HIH

... Ричи

поэтому при вставке нового элемента и последующем выполнении теста contains (e) поиск будет выполнен за O (n), потому что сортировка основана на постановке в очередь, не на значении данных, если вы включите a HashSet для поддержки функциональности Set , однако вы можете значительно сократить время поиска за счет двукратного сохранения ссылок на наборы данных (помните, что Java - передача по значению и все объекты живут в куче). Это должно улучшить производительность большого набора.

вы можете значительно сократить время поиска за счет двукратного сохранения ссылок на набор данных (помните, что Java - это передача по значению, и все объекты находятся в куче). Это должно улучшить производительность большого набора.

вы можете значительно сократить время поиска за счет двукратного сохранения ссылок на набор данных (помните, что Java - это передача по значению, и все объекты находятся в куче). Это должно улучшить производительность большого набора.

1
ответ дан 4 December 2019 в 21:10
поделиться

PriorityQueue - это AbstractCollection - у него почти идентичный интерфейс с Set. Я уверен, что было бы легко создать оболочку, которая преобразует PriorityQueue в Set. Вы можете сохранить боковую хеш-таблицу вставленных элементов, чтобы избежать дублирования, если вам действительно нужно это сделать.

Я не думаю, что PriorityQueue требует, чтобы compareTo был согласован с равными. PriorityQueue вообще не использует равенства (кроме унаследованных от него операций AbstractCollection?).

0
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: