Qual è la differenza tra i metodi di aggiunta e offerta di PriorityQueue di Java?


12

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:


17

La differenza è che offer()tornerà falsese 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).


4

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 Queuenell'interfaccia:

  • Queue.add

    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à ...

  • Queue.offer

    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: truese l'elemento è stato aggiunto a questa coda, altrimenti false...

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.


2
Pffft sei andato a guardare i documenti. Debole. ; P
yannis

1
@YannisRizos la prossima cosa che vedrai sarebbe che mi lamento come Col Shrapnel :) oh non puoi competere con risposte di 30 secondi: una domanda otterrà 5 risposte prima che tu possa persino trovare un collegamento appropriato blah blah
gnat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.