У java.util.PriorityQueue у нас є методи add(E e)
і offer(E e)
. Обидва методи задокументовані як:
Вставляє вказаний елемент у цю чергу пріоритетів.
Які відмінності між цими двома методами?
У java.util.PriorityQueue у нас є методи add(E e)
і offer(E e)
. Обидва методи задокументовані як:
Вставляє вказаний елемент у цю чергу пріоритетів.
Які відмінності між цими двома методами?
Відповіді:
Різниця полягає в тому, що offer()
повернеться , false
якщо він не вставити елемент на розмір обмеженого черзі , в той час як add()
буде кидатися IllegalStateException
.
Ви повинні використовувати, offer()
коли невдача елемента була б нормальною, і add()
коли зрив був би надзвичайним явищем (з цим потрібно впоратися).
Щоб дізнатися різницю, потрібно дотримуватися Javavadocs API PriorityQueue, які, у свою чергу, мають розділи "Вказано за", які посилають читач на відповідні методи в Queue
інтерфейсі:
Вставляє вказаний елемент у цю чергу, якщо це можливо зробити негайно, не порушуючи обмежень пропускної спроможності, повертаючи істину після успіху та кидаючи IllegalStateException, якщо в даний час немає місця ...
Повертається:true
(як зазначено Collection.add (E) )
Кидає:IllegalStateException
- якщо елемент не може бути доданий наразі через обмеження ємності ...
Вставляє вказаний елемент у цю чергу, якщо це можливо зробити негайно, не порушуючи обмежень пропускної здатності. Під час використання черги з обмеженою ємністю цей метод, як правило, бажано додати (E), який не може вставити елемент лише шляхом викиду винятку ...
Повертається:true
якщо елемент був доданий до цієї черги, іншеfalse
...
Обидва способи присутні, оскільки їх потрібно реалізувати задекларованим інтерфейсом.
Зауважте, оскільки оскільки PriorityQueue не є обмеженим (як зазначено в javadocs: "без обмеженої черги пріоритетів на основі купи пріоритету ...", переваги дизайнерів API, викладені вище, не застосовуються. Це означає, що на розсуд програміста залишається вибрати метод, який краще відповідає їх потребам у конкретному контексті використання.