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

3

In java.util.PriorityQueue abbiamo i metodi add(E e) e offer(E e) . Entrambi i metodi sono documentati come:

Inserts the specified element into this priority queue.

Quali sono le differenze tra questi due metodi?

    
posta agent13 12.03.2013 - 13:58
fonte

2 risposte

7

La differenza è che offer() restituirà false se non riesce a inserire l'elemento su una dimensione limitata Queue , mentre add() genererà un IllegalStateException .

Dovresti usare offer() quando l'errore di inserire un elemento sarebbe normale, e add() quando il fallimento sarebbe un evento eccezionale (che deve essere gestito).

    
risposta data 12.03.2013 - 14:05
fonte
2

Per scoprire la differenza, è necessario seguire API javadoc PriorityQueue che a loro volta hanno sezioni "Specificato da" che rimandano il lettore ai rispettivi metodi nell'interfaccia Queue :

  • Queue.add

    Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions, returning true upon success and throwing an IllegalStateException if no space is currently available...
    Returns: true (as specified by Collection.add(E))
    Throws: IllegalStateException - if the element cannot be added at this time due to capacity restrictions...

  • Queue.offer

    Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions. When using a capacity-restricted queue, this method is generally preferable to add(E), which can fail to insert an element only by throwing an exception...
    Returns: true if the element was added to this queue, else false...

Entrambi i metodi sono presenti perché questi devono essere implementati dall'interfaccia dichiarata.

Da quando PriorityQueue è illimitato (come indicato in javadocs: " coda di priorità illimitata basata su un heap di priorità ..."), le preferenze dei progettisti di API espresse sopra non si applicano. Ciò significa che è a discrezione del programmatore scegliere il metodo più adatto alle proprie esigenze in uno specifico contesto di utilizzo.

    
risposta data 12.03.2013 - 14:10
fonte

Leggi altre domande sui tag