In java.util.PriorityQueue abbiamo i metodi add(E e)
e offer(E e)
. Entrambi i metodi sono documentati come:
Inserisce l'elemento specificato in questa coda prioritaria.
Quali sono le differenze tra questi due metodi?
In java.util.PriorityQueue abbiamo i metodi add(E e)
e offer(E e)
. Entrambi i metodi sono documentati come:
Inserisce l'elemento specificato in questa coda prioritaria.
Quali sono le differenze tra questi due metodi?
Risposte:
La differenza è che offer()
tornerà false
se non riesce a inserire l'elemento in una coda con dimensioni limitate , mentre add()
verrà lanciato un IllegalStateException
.
Dovresti usare offer()
quando il fallimento nell'inserimento di un elemento sarebbe normale e add()
quando il fallimento sarebbe un evento eccezionale (che deve essere gestito).
Per scoprire la differenza, è necessario seguire le javadocs dell'API PriorityQueue che a loro volta hanno sezioni "Specificate da" che rimandano il lettore ai rispettivi metodi Queue
nell'interfaccia:
Inserisce l'elemento specificato in questa coda se è possibile farlo immediatamente senza violare le restrizioni di capacità, restituendo true in caso di successo e lanciando un IllegalStateException se non è attualmente disponibile spazio ...
Restituisce:true
(come specificato da Collection.add (E) )
Produce:IllegalStateException
- se l'elemento non può essere aggiunto in questo momento a causa di limiti di capacità ...
Inserisce l'elemento specificato in questa coda se è possibile farlo immediatamente senza violare le restrizioni di capacità. Quando si utilizza una coda a capacità limitata, questo metodo è generalmente preferibile per aggiungere (E), che può non riuscire a inserire un elemento solo lanciando un'eccezione ...
Restituisce:true
se l'elemento è stato aggiunto a questa coda, altrimentifalse
...
Entrambi i metodi sono presenti perché devono essere implementati dall'interfaccia dichiarata.
Si noti che poiché PriorityQueue è illimitato (come indicato in javadocs: " coda di priorità illimitata basata su un heap di priorità ..."), non si applicano le preferenze dei progettisti API espresse sopra. Ciò significa che è a discrezione del programmatore scegliere il metodo più adatto alle proprie esigenze in un contesto di utilizzo specifico.