У чому різниця методів додавання та пропозиції Java PriorityQueue?


12

У java.util.PriorityQueue у нас є методи add(E e)і offer(E e). Обидва методи задокументовані як:

Вставляє вказаний елемент у цю чергу пріоритетів.

Які відмінності між цими двома методами?

Відповіді:


17

Різниця полягає в тому, що offer()повернеться , falseякщо він не вставити елемент на розмір обмеженого черзі , в той час як add()буде кидатися IllegalStateException.

Ви повинні використовувати, offer()коли невдача елемента була б нормальною, і add()коли зрив був би надзвичайним явищем (з цим потрібно впоратися).


4

Щоб дізнатися різницю, потрібно дотримуватися Javavadocs API PriorityQueue, які, у свою чергу, мають розділи "Вказано за", які посилають читач на відповідні методи в Queueінтерфейсі:

  • Queue.add

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

  • Queue.offer

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

Обидва способи присутні, оскільки їх потрібно реалізувати задекларованим інтерфейсом.

Зауважте, оскільки оскільки PriorityQueue не є обмеженим (як зазначено в javadocs: "без обмеженої черги пріоритетів на основі купи пріоритету ...", переваги дизайнерів API, викладені вище, не застосовуються. Це означає, що на розсуд програміста залишається вибрати метод, який краще відповідає їх потребам у конкретному контексті використання.


2
Pffft ви пішли і подивилися на документи. Слабкий. ; П
янніс

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