--- jsr166/src/main/java/util/Queue.java 2003/08/30 11:40:04 1.16
+++ jsr166/src/main/java/util/Queue.java 2006/03/03 17:18:16 1.34
@@ -1,32 +1,66 @@
/*
* Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain. Use, modify, and
- * redistribute this code in any way without acknowledgement.
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/licenses/publicdomain
*/
package java.util;
/**
* A collection designed for holding elements prior to processing.
- * Besides basic {@link java.util.Collection Collection} operations, queues provide
- * additional insertion, extraction, and inspection operations.
+ * Besides basic {@link java.util.Collection Collection} operations,
+ * queues provide additional insertion, extraction, and inspection
+ * operations. Each of these methods exists in two forms: one throws
+ * an exception if the operation fails, the other returns a special
+ * value (either null or false, depending on the
+ * operation). The latter form of the insert operation is designed
+ * specifically for use with capacity-restricted Queue
+ * implementations; in most implementations, insert operations cannot
+ * fail.
+ *
+ *
+ *
+ *
+ * |
+ * Throws exception |
+ * Returns special value |
+ *
+ *
+ * Insert |
+ * {@link #add add(e)} |
+ * {@link #offer offer(e)} |
+ *
+ *
+ * Remove |
+ * {@link #remove remove()} |
+ * {@link #poll poll()} |
+ *
+ *
+ * Examine |
+ * {@link #element element()} |
+ * {@link #peek peek()} |
+ *
+ *
*
* Queues typically, but do not necessarily, order elements in a
* FIFO (first-in-first-out) manner. Among the exceptions are
* priority queues, which order elements according to a supplied
* comparator, or the elements' natural ordering, and LIFO queues (or
* stacks) which order the elements LIFO (last-in-first-out).
- * Whatever the ordering used, the head of the queue is that element
- * which would be removed by a call to {@link #remove() } or {@link #poll()}.
- * Every Queue implementation must specify its ordering guarantees.
- *
- *
The {@link #offer offer} method adds an element if possible, otherwise
- * returning false. This differs from the
- * {@link java.util.Collection#add Collection.add}
- * method, which throws an unchecked exception upon
- * failure. It is designed for use in collections in which failure to
- * add is a normal, rather than exceptional occurrence, for example,
- * in fixed-capacity (or "bounded") queues.
+ * Whatever the ordering used, the head of the queue is that
+ * element which would be removed by a call to {@link #remove() } or
+ * {@link #poll()}. In a FIFO queue, all new elements are inserted at
+ * the tail of the queue. Other kinds of queues may use
+ * different placement rules. Every Queue implementation
+ * must specify its ordering properties.
+ *
+ *
The {@link #offer offer} method inserts an element if possible,
+ * otherwise returning false. This differs from the {@link
+ * java.util.Collection#add Collection.add} method, which can fail to
+ * add an element only by throwing an unchecked exception. The
+ * offer method is designed for use when failure is a normal,
+ * rather than exceptional occurrence, for example, in fixed-capacity
+ * (or "bounded") queues.
*
*
The {@link #remove()} and {@link #poll()} methods remove and
* return the head of the queue.
@@ -76,64 +110,80 @@ package java.util;
* @see java.util.concurrent.PriorityBlockingQueue
* @since 1.5
* @author Doug Lea
+ * @param the type of elements held in this collection
*/
public interface Queue extends Collection {
-
/**
- * Adds the specified element to this queue, if possible.
+ * 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.
*
- * @param o the element to add.
- * @return true if it was possible to add the element to
- * this queue, else false
+ * @param e the element to add
+ * @return true (as specified by {@link Collection#add})
+ * @throws IllegalStateException if the element cannot be added at this
+ * time due to capacity restrictions
+ * @throws ClassCastException if the class of the specified element
+ * prevents it from being added to this queue
+ * @throws NullPointerException if the specified element is null and
+ * this queue does not permit null elements
+ * @throws IllegalArgumentException if some property of this element
+ * prevents it from being added to this queue
*/
- boolean offer(E o);
+ boolean add(E e);
/**
- * Retrieves and removes the head of this queue, if it is available.
+ * 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 {@link #add}, which can fail to insert an element only
+ * by throwing an exception.
*
- * @return the head of this queue, or null if this
- * queue is empty.
+ * @param e the element to add
+ * @return true if the element was added to this queue, else
+ * false
+ * @throws ClassCastException if the class of the specified element
+ * prevents it from being added to this queue
+ * @throws NullPointerException if the specified element is null and
+ * this queue does not permit null elements
+ * @throws IllegalArgumentException if some property of this element
+ * prevents it from being added to this queue
*/
- E poll();
+ boolean offer(E e);
/**
- * Retrieves and removes the head of this queue.
- * This method differs
- * from the poll method in that it throws an exception if this
+ * Retrieves and removes the head of this queue. This method differs
+ * from {@link #poll poll} only in that it throws an exception if this
* queue is empty.
*
- * @return the head of this queue.
- * @throws NoSuchElementException if this queue is empty.
+ * @return the head of this queue
+ * @throws NoSuchElementException if this queue is empty
*/
E remove();
/**
- * Retrieves, but does not remove, the head of this queue.
- * This method differs from the poll
- * method only in that this method does not remove the head element from
- * this queue.
+ * Retrieves and removes the head of this queue,
+ * or returns null if this queue is empty.
*
- * @return the head of this queue, or null if this queue is empty.
+ * @return the head of this queue, or null if this queue is empty
*/
- E peek();
+ E poll();
/**
* Retrieves, but does not remove, the head of this queue. This method
- * differs from the peek method only in that it throws an
- * exception if this queue is empty.
+ * differs from {@link #peek peek} only in that it throws an exception
+ * if this queue is empty.
*
- * @return the head of this queue.
- * @throws NoSuchElementException if this queue is empty.
+ * @return the head of this queue
+ * @throws NoSuchElementException if this queue is empty
*/
E element();
-}
-
-
-
-
-
-
-
-
-
+ /**
+ * Retrieves, but does not remove, the head of this queue,
+ * or returns null if this queue is empty.
+ *
+ * @return the head of this queue, or null if this queue is empty
+ */
+ E peek();
+}