В java.util.PriorityQueue у нас есть методы add(E e)
и offer(E e)
. Оба метода документированы как:
Вставляет указанный элемент в эту очередь приоритетов.
Каковы различия между этими двумя методами?
источник
В java.util.PriorityQueue у нас есть методы add(E e)
и offer(E e)
. Оба метода документированы как:
Вставляет указанный элемент в эту очередь приоритетов.
Каковы различия между этими двумя методами?
Разница заключается в том, что offer()
вернется , false
если он не вставить элемент на размер ограниченного очереди , в то время как add()
будет бросаться IllegalStateException
.
Вы должны использовать, offer()
когда сбой при вставке элемента будет нормальным, и add()
когда сбой будет исключительным случаем (который должен быть обработан).
Чтобы выяснить разницу, нужно следовать Javadocs API PriorityQueue, которые, в свою очередь, имеют разделы «Specified By», которые отсылают читателя к соответствующим методам в Queue
интерфейсе:
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения емкости, возвращая true в случае успеха и выбрасывая исключение IllegalStateException, если в настоящее время нет свободного места ...
Возвращает:true
(как указано в Collection.add (E) )
Выдает:IllegalStateException
- если элемент не может быть добавлен в это время из-за ограничений емкости ...
Вставляет указанный элемент в эту очередь, если это можно сделать немедленно, не нарушая ограничения по емкости. При использовании очереди с ограниченной емкостью этот метод обычно предпочтительнее добавить (E), который может не вставить элемент, только вызвав исключение ...
Возвращает:true
если элемент был добавлен в эту очередь, ещеfalse
...
Оба метода присутствуют, потому что они должны быть реализованы объявленным интерфейсом.
Обратите внимание, что поскольку PriorityQueue не ограничен (как указано в javadocs: « очередь с неограниченным приоритетом на основе кучи приоритетов ...»), предпочтения разработчиков API, выраженные выше, не применяются. Это означает, что на усмотрение программиста остается выбор метода, который лучше соответствует их потребностям в конкретном контексте использования.