What is the difference between the add and offer methods in a Queue in Java?

addition, java, queue

Solution

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.

Problem

Take the `PriorityQueue` for example http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E) Can anyone give me an example of a `Queue` where the `add` and `offer` methods are different? According to the `Collection` doc, the `add` method will often seek to ensure that an element exists within the `Collection` rather than adding duplicates. So my question is, what is the difference between the `add` and `offer` methods? Is it that the `offer` method will add duplicates regardless? (I doubt that it is because if a `Collection` should only have distinct elements this would circumvent that). EDIT: In a `PriorityQueue` the `add` and `offer` methods are the same method (see my answer below). Can anyone give me an example of a class where the `add` and `offer` methods are different?

Original source