Существуют некоторые случаи, где это имеет смысл к нулевым ссылкам. Например, когда Вы пишете набор - как приоритетная очередь - и согласно Вашему контракту, Вы не должны поддерживать те объекты для клиента после того, как клиент удалил их из очереди.
, Но этот вид вещи только имеет значение в долговечных наборах. Если очередь, не собирающаяся пережить конец функции, в которой это было создано, то это имеет значение намного меньше.
На целом, Вы действительно не должны беспокоиться. Позвольте компилятору, и GC делают их работы, таким образом, можно сделать Ваши.
Если достаточно иметь очередь с поведением, подобным Set, если вы просто не хотите принимать повторяющиеся записи, то я думаю, что простым решением может быть создание подкласса PriorityQueue
и переопределите методы add ()
, addAll ()
и offer ()
, например:
@Override
public boolean offer(E e) {
if (contains(e)) {
return false;
} else {
return super.offer(e);
}
}
BTW - добавить ()
вызывает offer ()
внутри, так что, может быть, даже достаточно просто переопределить метод offer ()
и выполнить там проверку.
Вероятно, вам стоит узнать больше об объектно-ориентированном программировании. Вот хороший учебник, основанный на Python:
Объектно-ориентированное программирование - это способ организовать ваши программы таким образом, чтобы они отражали элементы проблемы, которую вы пытаетесь решить.
HIH
... Ричи
поэтому при вставке нового элемента и последующем выполнении теста contains (e)
поиск будет выполнен за O (n), потому что сортировка основана на постановке в очередь, не на значении данных, если вы включите a HashSet
для поддержки функциональности Set
, однако вы можете значительно сократить время поиска за счет двукратного сохранения ссылок на наборы данных (помните, что Java - передача по значению и все объекты живут в куче). Это должно улучшить производительность большого набора. вы можете значительно сократить время поиска за счет двукратного сохранения ссылок на набор данных (помните, что Java - это передача по значению, и все объекты находятся в куче). Это должно улучшить производительность большого набора. вы можете значительно сократить время поиска за счет двукратного сохранения ссылок на набор данных (помните, что Java - это передача по значению, и все объекты находятся в куче). Это должно улучшить производительность большого набора. PriorityQueue - это AbstractCollection - у него почти идентичный интерфейс с Set. Я уверен, что было бы легко создать оболочку, которая преобразует PriorityQueue в Set. Вы можете сохранить боковую хеш-таблицу вставленных элементов, чтобы избежать дублирования, если вам действительно нужно это сделать.
Я не думаю, что PriorityQueue требует, чтобы compareTo был согласован с равными. PriorityQueue вообще не использует равенства (кроме унаследованных от него операций AbstractCollection?).