Nehmen Sie PriorityQueue
zum Beispiel http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E)
Kann mir jemand ein Beispiel geben, Queue
wo die add
und offer
Methoden unterschiedlich sind?
Laut dem Collection
Dokument versucht die add
Methode häufig sicherzustellen, dass ein Element in der vorhanden ist, Collection
anstatt Duplikate hinzuzufügen. Meine Frage ist also, was ist der Unterschied zwischen add
und offer
Methoden?
Wird die offer
Methode unabhängig davon Duplikate hinzufügen? (Ich bezweifle, dass es daran liegt, dass wenn a Collection
nur unterschiedliche Elemente haben sollte, dies das umgehen würde).
EDIT: In a sind PriorityQueue
die add
und offer
Methoden die gleiche Methode (siehe meine Antwort unten). Kann mir jemand ein Beispiel für eine Klasse geben, in der die Methoden add
und offer
Methoden unterschiedlich sind?
offer
vs verwendet werden solladd
.Es gibt keinen Unterschied für die Implementierung von
PriorityQueue.add
:Denn es
AbstractQueue
gibt tatsächlich einen Unterschied:quelle
add
Methode von deroffer
Methode unterscheidet?Der Unterschied zwischen
offer
undadd
wird durch diese beiden Auszüge aus den Javadocs erklärt:Von der
Collection
Schnittstelle:Von der
Queue
SchnittstellePriorityQueue
ist eineQueue
Implementierung, die keine Einfügungsbeschränkungen auferlegt. Deshalbadd
undoffer
haben Methoden die gleiche Semantik.Im Gegensatz dazu
ArrayBlockingQueue
ist eine Implementierung , in deroffer
undadd
verhalten sich anders, je nachdem , wie die Warteschlange instanziiert wurde.quelle
Der Unterschied ist folgender:
Angebotsmethode - versucht, ein Element zu einer Warteschlange hinzuzufügen, und gibt false zurück, wenn das Element nicht hinzugefügt werden kann (z. B. wenn eine Warteschlange voll ist), oder true, wenn das Element hinzugefügt wurde, und löst keine bestimmte Ausnahme aus .
Methode add - versucht, ein Element zu einer Warteschlange hinzuzufügen, gibt true zurück , wenn das Element hinzugefügt wurde, oder löst eine IllegalStateException aus, wenn derzeit kein Speicherplatz verfügbar ist.
quelle
aus dem Quellcode in JDK 7 wie folgt:
Wir können leicht erkennen, dass die Funktion add true zurückgibt, wenn ein neues Element erfolgreich in die Warteschlange aufgenommen wurde. Wenn dies jedoch fehlschlägt, wird eine Ausnahme ausgelöst.
quelle
Die
Queue
Schnittstelle gibt an, dassadd()
ausgelöst wird,IllegalStateException
wenn derzeit kein Speicherplatz verfügbar ist (und andernfalls zurückgegeben wirdtrue
), während zurückgegebenoffer()
wird,false
wenn das Element aufgrund von Kapazitätsbeschränkungen nicht eingefügt werden konnte.Der Grund, warum sie in a identisch sind,
PriorityQueue
ist, dass diese Warteschlange als unbegrenzt angegeben ist, dh es gibt keine Kapazitätsbeschränkungen. Wenn keine Kapazitätsbeschränkungen bestehen, zeigen die Verträge vonadd()
undoffer()
dasselbe Verhalten.quelle
Ich werde den Beispielcode für den Java-Vertrag für die Angebotsmethode schreiben und eine Methode hinzufügen, die zeigt, wie sie sich unterscheiden.
quelle
Quelle: http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html
Die Angebotsmethode fügt nach Möglichkeit ein Element ein, andernfalls wird false zurückgegeben. Dies unterscheidet sich von der Collection.add-Methode, bei der ein Element nur durch Auslösen einer nicht aktivierten Ausnahme nicht hinzugefügt werden kann. Die Angebotsmethode ist für die Verwendung konzipiert, wenn ein Fehler eher normal als außergewöhnlich ist, z. B. in Warteschlangen mit fester Kapazität (oder "begrenzt").
quelle