Was ist der Unterschied zwischen den Add- und Offer-Methoden von Javas PriorityQueue?

12

In java.util.PriorityQueue haben wir die Methoden add(E e)und offer(E e). Beide Methoden sind dokumentiert als:

Fügt das angegebene Element in diese Prioritätswarteschlange ein.

Was sind die Unterschiede zwischen diesen beiden Methoden?

agent13
quelle

Antworten:

15

Der Unterschied besteht darin, dass zurückgegeben offer()wird, falsewenn das Element nicht in eine Warteschlange mit eingeschränkter Größe eingefügt werden kann , während add()ein Element ausgelöst wird IllegalStateException.

Sie sollten verwenden, offer()wenn ein Fehler beim Einfügen eines Elements normal ist und add()wenn ein Fehler ein außergewöhnliches Ereignis ist (das behandelt werden muss).

Yannis
quelle
3

Um den Unterschied herauszufinden, müssen Sie den Javadocs der PriorityQueue-API folgen, die wiederum Abschnitte "Spezifiziert von" enthalten, die den Leser auf die jeweiligen Methoden in der QueueSchnittstelle verweisen :

  • Queue.add

    Fügt das angegebene Element in diese Warteschlange , wenn es möglich ist , dies unverzüglich zu tun , ohne Kapazitätsbeschränkungen zu verletzen, gibt true zurück , bei Erfolg und wirft eine Illegal wenn kein Platz zur Zeit verfügbar ist ...
    Returns: true(wie angegeben Collection.add (E) )
    Auslöser: IllegalStateException- Wenn das Element zu diesem Zeitpunkt aufgrund von Kapazitätsbeschränkungen nicht hinzugefügt werden kann ...

  • Queue.offer

    Fügt das angegebene Element in diese Warteschlange ein, wenn dies sofort möglich ist, ohne die Kapazitätsbeschränkungen zu verletzen. Wenn eine Kapazität beschränkte Warteschlange verwendet wird , ist dieses Verfahren im allgemeinen bevorzugt (E) hinzuzufügen, die ein Element nicht nur einzufügen , indem Sie eine Ausnahme zu werfen ...
    Rückkehr: truewenn das Element in dieser Warteschlange hinzugefügt wurde, sonst false...

Beide Methoden sind vorhanden, da diese von der deklarierten Schnittstelle implementiert werden müssen.

Beachten Sie, dass die Präferenz der oben genannten API-Designer nicht gilt , da PriorityQueue unbegrenzt ist (wie in javadocs angegeben: " Unbegrenzte Prioritätswarteschlange basierend auf einem Prioritätsheap ..."). Dies bedeutet, dass es im Ermessen des Programmierers liegt, die Methode auszuwählen, die ihren Anforderungen in einem bestimmten Verwendungskontext besser entspricht.

Mücke
quelle
2
Pffft du bist gegangen und hast dir die Dokumente angesehen. Schwach. ; P
yannis
1
@YannisRizos Das nächste, was Sie sehen werden, ist, dass ich mich wie Col Shrapnel beschwere :) Oh, Sie können nicht mit 30-Sekunden-Antworten konkurrieren: Eine Frage erhält 5 Antworten, bevor Sie überhaupt einen geeigneten Link finden können bla bla
mücke