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?
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?
Antworten:
Der Unterschied besteht darin, dass zurückgegeben offer()
wird, false
wenn 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).
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 Queue
Schnittstelle verweisen :
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 ...
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:true
wenn das Element in dieser Warteschlange hinzugefügt wurde, sonstfalse
...
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.