I guess the difference is in the contract, that when element can not be added to collection the add
method throws an exception and offer
doesn't.
From: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collection.html#add%28E%29
If a collection refuses to add a particular element for any reason other than that it already contains the element, it must throw an exception (rather than returning false). This preserves the invariant that a collection always contains the specified element after this call returns.
From: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Queue.html#offer%28E%29
Inserts the specified element into this queue, if possible. When using queues that may impose insertion restrictions (for example capacity bounds), method offer is generally preferable to method Collection.add(E), which can fail to insert an element only by throwing an exception.
There is no difference for the implementation of PriorityQueue.add
:
public boolean add(E e) {
return offer(e);
}
For AbstractQueue
there actually is a difference:
public boolean add(E e) {
if (offer(e))
return true;
else
throw new IllegalStateException("Queue full");
}
The difference between offer
and add
is explained by these two excerpts from the javadocs:
From the Collection
interface:
If a collection refuses to
add
a particular element for any reason other than that it already contains the element, it must throw an exception (rather than returning false). This preserves the invariant that a collection always contains the specified element after this call returns.
From the Queue
interface
When using queues that may impose insertion restrictions (for example capacity bounds), method
offer
is generally preferable to methodCollection.add(E)
, which can fail to insert an element only by throwing an exception.
PriorityQueue
is a Queue
implementation that does not impose any insertion restrictions. Therefore the add
and offer
methods have the same semantics.
By contrast, ArrayBlockingQueue
is an implementation in which offer
and add
behave differently, depending on how the queue was instantiated.
The difference is following:
offer method - tries to add an element to a queue, and returns false if the element can't be added (like in case when a queue is full), or true if the element was added, and doesn't throw any specific exception.
add method - tries to add an element to a queue, returns true if the element was added, or throws an IllegalStateException if no space is currently available.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With