Чем отличаются методы добавления и предложения в Java PriorityQueue?


12

В java.util.PriorityQueue у нас есть методы add(E e)и offer(E e). Оба метода документированы как:

Вставляет указанный элемент в эту очередь приоритетов.

Каковы различия между этими двумя методами?

Ответы:


17

Разница заключается в том, что offer()вернется , falseесли он не вставить элемент на размер ограниченного очереди , в то время как add()будет бросаться IllegalStateException.

Вы должны использовать, offer()когда сбой при вставке элемента будет нормальным, и add()когда сбой будет исключительным случаем (который должен быть обработан).


4

Чтобы выяснить разницу, нужно следовать Javadocs API PriorityQueue, которые, в свою очередь, имеют разделы «Specified By», которые отсылают читателя к соответствующим методам в Queueинтерфейсе:

  • Queue.add

    Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения емкости, возвращая true в случае успеха и выбрасывая исключение IllegalStateException, если в настоящее время нет свободного места ...
    Возвращает: true(как указано в Collection.add (E) )
    Выдает: IllegalStateException- если элемент не может быть добавлен в это время из-за ограничений емкости ...

  • Queue.offer

    Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения по емкости. При использовании очереди с ограниченной емкостью этот метод обычно предпочтительнее добавить (E), который может не вставить элемент, только вызвав исключение ...
    Возвращает: trueесли элемент был добавлен в эту очередь, еще false...

Оба метода присутствуют, потому что они должны быть реализованы объявленным интерфейсом.

Обратите внимание, что поскольку PriorityQueue не ограничен (как указано в javadocs: « очередь с неограниченным приоритетом на основе кучи приоритетов ...»), предпочтения разработчиков API, выраженные выше, не применяются. Это означает, что на усмотрение программиста остается выбор метода, который лучше соответствует их потребностям в конкретном контексте использования.


2
Пфффт, ты пошел и посмотрел на документы. Слабый. ; P
Яннис

1
@YannisRizos Следующим, что вы увидите, будет то, что я буду жаловаться, как полковник Шрапнель :) о, вы не можете конкурировать с 30-секундными ответами: на вопрос будет получено 5 ответов, прежде чем вы сможете даже найти подходящую ссылку, бла-бла
комара
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.