У 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, викладені вище, не застосовуються. Це означає, що на розсуд програміста залишається вибрати метод, який краще відповідає їх потребам у конкретному контексті використання.