--- jsr166/src/main/java/util/Deque.java 2005/06/18 01:56:01 1.14
+++ jsr166/src/main/java/util/Deque.java 2017/05/06 06:49:45 1.36
@@ -1,16 +1,15 @@
/*
* Written by Doug Lea and Josh Bloch with assistance from members of
* JCP JSR-166 Expert Group and released to the public domain, as explained
- * at http://creativecommons.org/licenses/publicdomain
+ * at http://creativecommons.org/publicdomain/zero/1.0/
*/
package java.util;
-import java.util.*; // for javadoc
/**
* A linear collection that supports element insertion and removal at
* both ends. The name deque is short for "double ended queue"
- * and is usually pronounced "deck". Most Deque
+ * and is usually pronounced "deck". Most {@code Deque}
* implementations place no fixed limits on the number of elements
* they may contain, but this interface supports capacity-restricted
* deques as well as those with no fixed size limit.
@@ -19,17 +18,17 @@ import java.util.*; // for javadoc
* ends of the deque. Methods are provided to insert, remove, and
* examine the element. 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
+ * special value (either {@code null} or {@code false}, depending on
* the operation). The latter form of the insert operation is
* designed specifically for use with capacity-restricted
- * Deque implementations; in most implementations, insert
+ * {@code Deque} implementations; in most implementations, insert
* operations cannot fail.
*
*
The twelve methods described above are summarized in the
* following table:
*
- *
*
+ * Summary of Deque methods
*
* |
* First Element (Head) |
@@ -44,62 +43,62 @@ import java.util.*; // for javadoc
*
*
* Insert |
- * {@link #addFirst addFirst(e)} |
- * {@link #offerFirst offerFirst(e)} |
- * {@link #addLast addLast(e)} |
- * {@link #offerLast offerLast(e)} |
+ * {@link #addFirst(Object) addFirst(e)} |
+ * {@link #offerFirst(Object) offerFirst(e)} |
+ * {@link #addLast(Object) addLast(e)} |
+ * {@link #offerLast(Object) offerLast(e)} |
*
*
* Remove |
- * {@link #removeFirst removeFirst()} |
- * {@link #pollFirst pollFirst()} |
- * {@link #removeLast removeLast()} |
- * {@link #pollLast pollLast()} |
+ * {@link #removeFirst() removeFirst()} |
+ * {@link #pollFirst() pollFirst()} |
+ * {@link #removeLast() removeLast()} |
+ * {@link #pollLast() pollLast()} |
*
*
* Examine |
- * {@link #getFirst getFirst()} |
- * {@link #peekFirst peekFirst()} |
- * {@link #getLast getLast()} |
- * {@link #peekLast peekLast()} |
+ * {@link #getFirst() getFirst()} |
+ * {@link #peekFirst() peekFirst()} |
+ * {@link #getLast() getLast()} |
+ * {@link #peekLast() peekLast()} |
*
*
*
* This interface extends the {@link Queue} interface. When a deque is
* used as a queue, FIFO (First-In-First-Out) behavior results. Elements are
* added at the end of the deque and removed from the beginning. The methods
- * inherited from the Queue interface are precisely equivalent to
- * Deque methods as indicated in the following table:
+ * inherited from the {@code Queue} interface are precisely equivalent to
+ * {@code Deque} methods as indicated in the following table:
*
- *
*
+ * Comparison of Queue and Deque methods
*
- * Queue Method |
- * Equivalent Deque Method |
+ * {@code Queue} Method |
+ * Equivalent {@code Deque} Method |
*
*
- * {@link java.util.Queue#add add(e)} |
- * {@link #addLast addLast(e)} |
+ * {@link #add(Object) add(e)} |
+ * {@link #addLast(Object) addLast(e)} |
*
*
- * {@link java.util.Queue#offer offer(e)} |
- * {@link #offerLast offerLast(e)} |
+ * {@link #offer(Object) offer(e)} |
+ * {@link #offerLast(Object) offerLast(e)} |
*
*
- * {@link java.util.Queue#remove remove()} |
- * {@link #removeFirst removeFirst()} |
+ * {@link #remove() remove()} |
+ * {@link #removeFirst() removeFirst()} |
*
*
- * {@link java.util.Queue#poll poll()} |
- * {@link #pollFirst pollFirst()} |
+ * {@link #poll() poll()} |
+ * {@link #pollFirst() pollFirst()} |
*
*
- * {@link java.util.Queue#element element()} |
- * {@link #getFirst getFirst()} |
+ * {@link #element() element()} |
+ * {@link #getFirst() getFirst()} |
*
*
- * {@link java.util.Queue#peek peek()} |
- * {@link #peek peekFirst()} |
+ * {@link #peek() peek()} |
+ * {@link #peekFirst() peekFirst()} |
*
*
*
@@ -107,25 +106,25 @@ import java.util.*; // for javadoc
* interface should be used in preference to the legacy {@link Stack} class.
* When a deque is used as a stack, elements are pushed and popped from the
* beginning of the deque. Stack methods are precisely equivalent to
- * Deque methods as indicated in the table below:
+ * {@code Deque} methods as indicated in the table below:
*
- *
*
+ * Comparison of Stack and Deque methods
*
* Stack Method |
- * Equivalent Deque Method |
+ * Equivalent {@code Deque} Method |
*
*
- * {@link #push push(e)} |
- * {@link #addFirst addFirst(e)} |
+ * {@link #push(Object) push(e)} |
+ * {@link #addFirst(Object) addFirst(e)} |
*
*
- * {@link #pop pop()} |
- * {@link #removeFirst removeFirst()} |
+ * {@link #pop() pop()} |
+ * {@link #removeFirst() removeFirst()} |
*
*
- * {@link #peek peek()} |
- * {@link #peekFirst peekFirst()} |
+ * {@link #peek() peek()} |
+ * {@link #peekFirst() peekFirst()} |
*
*
*
@@ -140,35 +139,35 @@ import java.util.*; // for javadoc
* Unlike the {@link List} interface, this interface does not
* provide support for indexed access to elements.
*
- *
While Deque implementations are not strictly required
+ *
While {@code Deque} implementations are not strictly required
* to prohibit the insertion of null elements, they are strongly
- * encouraged to do so. Users of any Deque implementations
+ * encouraged to do so. Users of any {@code Deque} implementations
* that do allow null elements are strongly encouraged not to
* take advantage of the ability to insert nulls. This is so because
- * null is used as a special return value by various methods
- * to indicated that the deque is empty.
+ * {@code null} is used as a special return value by various methods
+ * to indicate that the deque is empty.
*
- *
Deque implementations generally do not define
- * element-based versions of the equals and hashCode
+ *
{@code Deque} implementations generally do not define
+ * element-based versions of the {@code equals} and {@code hashCode}
* methods, but instead inherit the identity-based versions from class
- * Object.
+ * {@code Object}.
*
- *
This interface is a member of the Java Collections
- * Framework.
+ *
This interface is a member of the
+ *
+ * Java Collections Framework.
*
* @author Doug Lea
* @author Josh Bloch
* @since 1.6
- * @param the type of elements held in this collection
+ * @param the type of elements held in this deque
*/
-
public interface Deque extends Queue {
/**
* Inserts the specified element at the front of this deque if it is
- * possible to do so immediately without violating capacity restrictions.
- * When using a capacity-restricted deque, it is generally preferable to
- * use method {@link #offerFirst}.
+ * possible to do so immediately without violating capacity restrictions,
+ * throwing an {@code IllegalStateException} if no space is currently
+ * available. When using a capacity-restricted deque, it is generally
+ * preferable to use method {@link #offerFirst}.
*
* @param e the element to add
* @throws IllegalStateException if the element cannot be added at this
@@ -184,9 +183,10 @@ public interface Deque extends Queue<
/**
* Inserts the specified element at the end of this deque if it is
- * possible to do so immediately without violating capacity restrictions.
- * When using a capacity-restricted deque, it is generally preferable to
- * use method {@link #offerLast}.
+ * possible to do so immediately without violating capacity restrictions,
+ * throwing an {@code IllegalStateException} if no space is currently
+ * available. When using a capacity-restricted deque, it is generally
+ * preferable to use method {@link #offerLast}.
*
* This method is equivalent to {@link #add}.
*
@@ -209,8 +209,8 @@ public interface Deque extends Queue<
* which can fail to insert an element only by throwing an exception.
*
* @param e the element to add
- * @return true if the element was added to this deque, else
- * false
+ * @return {@code true} if the element was added to this deque, else
+ * {@code false}
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this deque
* @throws NullPointerException if the specified element is null and this
@@ -227,8 +227,8 @@ public interface Deque extends Queue<
* which can fail to insert an element only by throwing an exception.
*
* @param e the element to add
- * @return true if the element was added to this deque, else
- * false
+ * @return {@code true} if the element was added to this deque, else
+ * {@code false}
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this deque
* @throws NullPointerException if the specified element is null and this
@@ -240,8 +240,8 @@ public interface Deque extends Queue<
/**
* Retrieves and removes the first element of this deque. This method
- * differs from {@link #pollFirst} only in that it throws an exception
- * if this deque is empty.
+ * differs from {@link #pollFirst pollFirst} only in that it throws an
+ * exception if this deque is empty.
*
* @return the head of this deque
* @throws NoSuchElementException if this deque is empty
@@ -250,8 +250,8 @@ public interface Deque extends Queue<
/**
* Retrieves and removes the last element of this deque. This method
- * differs from {@link #pollLast} only in that it throws an exception if
- * this deque is empty.
+ * differs from {@link #pollLast pollLast} only in that it throws an
+ * exception if this deque is empty.
*
* @return the tail of this deque
* @throws NoSuchElementException if this deque is empty
@@ -260,24 +260,25 @@ public interface Deque extends Queue<
/**
* Retrieves and removes the first element of this deque,
- * or returns null if this deque is empty.
+ * or returns {@code null} if this deque is empty.
*
- * @return the head of this deque, or null if this deque is empty
+ * @return the head of this deque, or {@code null} if this deque is empty
*/
E pollFirst();
/**
* Retrieves and removes the last element of this deque,
- * or returns null if this deque is empty.
+ * or returns {@code null} if this deque is empty.
*
- * @return the tail of this deque, or null if this deque is empty
+ * @return the tail of this deque, or {@code null} if this deque is empty
*/
E pollLast();
/**
* Retrieves, but does not remove, the first element of this deque.
- * This method differs from {@link #peekFirst} only in that it throws an
- * exception if this deque is empty.
+ *
+ * This method differs from {@link #peekFirst peekFirst} only in that it
+ * throws an exception if this deque is empty.
*
* @return the head of this deque
* @throws NoSuchElementException if this deque is empty
@@ -286,8 +287,8 @@ public interface Deque extends Queue<
/**
* Retrieves, but does not remove, the last element of this deque.
- * This method differs from {@link #peekLast} only in that it throws an
- * exception if this deque is empty.
+ * This method differs from {@link #peekLast peekLast} only in that it
+ * throws an exception if this deque is empty.
*
* @return the tail of this deque
* @throws NoSuchElementException if this deque is empty
@@ -296,53 +297,55 @@ public interface Deque extends Queue<
/**
* Retrieves, but does not remove, the first element of this deque,
- * or returns null if this deque is empty.
+ * or returns {@code null} if this deque is empty.
*
- * @return the head of this deque, or null if this deque is empty
+ * @return the head of this deque, or {@code null} if this deque is empty
*/
E peekFirst();
/**
* Retrieves, but does not remove, the last element of this deque,
- * or returns null if this deque is empty.
+ * or returns {@code null} if this deque is empty.
*
- * @return the tail of this deque, or null if this deque is empty
+ * @return the tail of this deque, or {@code null} if this deque is empty
*/
E peekLast();
/**
* Removes the first occurrence of the specified element from this deque.
* If the deque does not contain the element, it is unchanged.
- * More formally, removes the first element e such that
- * (o==null ? e==null : o.equals(e))
- * (if such an element exists).
- * Returns true if this deque contained the specified element
+ * More formally, removes the first element {@code e} such that
+ * {@code Objects.equals(o, e)} (if such an element exists).
+ * Returns {@code true} if this deque contained the specified element
* (or equivalently, if this deque changed as a result of the call).
*
* @param o element to be removed from this deque, if present
- * @return true if an element was removed as a result of this call
+ * @return {@code true} if an element was removed as a result of this call
* @throws ClassCastException if the class of the specified element
- * is incompatible with this deque (optional)
+ * is incompatible with this deque
+ * (optional)
* @throws NullPointerException if the specified element is null and this
- * deque does not permit null elements (optional)
+ * deque does not permit null elements
+ * (optional)
*/
boolean removeFirstOccurrence(Object o);
/**
* Removes the last occurrence of the specified element from this deque.
* If the deque does not contain the element, it is unchanged.
- * More formally, removes the last element e such that
- * (o==null ? e==null : o.equals(e))
- * (if such an element exists).
- * Returns true if this deque contained the specified element
+ * More formally, removes the last element {@code e} such that
+ * {@code Objects.equals(o, e)} (if such an element exists).
+ * Returns {@code true} if this deque contained the specified element
* (or equivalently, if this deque changed as a result of the call).
*
* @param o element to be removed from this deque, if present
- * @return true if an element was removed as a result of this call
+ * @return {@code true} if an element was removed as a result of this call
* @throws ClassCastException if the class of the specified element
- * is incompatible with this deque (optional)
+ * is incompatible with this deque
+ * (optional)
* @throws NullPointerException if the specified element is null and this
- * deque does not permit null elements (optional)
+ * deque does not permit null elements
+ * (optional)
*/
boolean removeLastOccurrence(Object o);
@@ -352,15 +355,15 @@ public interface Deque extends Queue<
* Inserts the specified element into the queue represented by this deque
* (in other words, at the tail of this deque) 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.
+ * {@code true} upon success and throwing an
+ * {@code IllegalStateException} if no space is currently available.
* When using a capacity-restricted deque, it is generally preferable to
* use {@link #offer(Object) offer}.
*
* This method is equivalent to {@link #addLast}.
*
* @param e the element to add
- * @return true (as per the spec for {@link Collection#add})
+ * @return {@code 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
@@ -376,7 +379,7 @@ public interface Deque extends Queue<
* Inserts the specified element into the queue represented by this deque
* (in other words, at the tail of this deque) if it is possible to do so
* immediately without violating capacity restrictions, returning
- * true upon success and false if no space is currently
+ * {@code true} upon success and {@code false} if no space is currently
* available. When using a capacity-restricted deque, this method is
* generally preferable to the {@link #add} method, which can fail to
* insert an element only by throwing an exception.
@@ -384,8 +387,8 @@ public interface Deque extends Queue<
* This method is equivalent to {@link #offerLast}.
*
* @param e the element to add
- * @return true if the element was added to this deque, else
- * false
+ * @return {@code true} if the element was added to this deque, else
+ * {@code false}
* @throws ClassCastException if the class of the specified element
* prevents it from being added to this deque
* @throws NullPointerException if the specified element is null and this
@@ -398,8 +401,8 @@ public interface Deque extends Queue<
/**
* Retrieves and removes the head of the queue represented by this deque
* (in other words, the first element of this deque).
- * This method differs from {@link #poll} only in that it throws an
- * exception if this deque is empty.
+ * This method differs from {@link #poll() poll()} only in that it
+ * throws an exception if this deque is empty.
*
* This method is equivalent to {@link #removeFirst()}.
*
@@ -411,11 +414,11 @@ public interface Deque extends Queue<
/**
* Retrieves and removes the head of the queue represented by this deque
* (in other words, the first element of this deque), or returns
- * null if this deque is empty.
+ * {@code null} if this deque is empty.
*
* This method is equivalent to {@link #pollFirst()}.
*
- * @return the first element of this deque, or null if
+ * @return the first element of this deque, or {@code null} if
* this deque is empty
*/
E poll();
@@ -423,7 +426,7 @@ public interface Deque extends Queue<
/**
* Retrieves, but does not remove, the head of the queue represented by
* this deque (in other words, the first element of this deque).
- * This method differs from {@link #peek} only in that it throws an
+ * This method differs from {@link #peek peek} only in that it throws an
* exception if this deque is empty.
*
* This method is equivalent to {@link #getFirst()}.
@@ -436,12 +439,12 @@ public interface Deque extends Queue<
/**
* Retrieves, but does not remove, the head of the queue represented by
* this deque (in other words, the first element of this deque), or
- * returns null if this deque is empty.
+ * returns {@code null} if this deque is empty.
*
* This method is equivalent to {@link #peekFirst()}.
*
* @return the head of the queue represented by this deque, or
- * null if this deque is empty
+ * {@code null} if this deque is empty
*/
E peek();
@@ -451,9 +454,8 @@ public interface Deque extends Queue<
/**
* Pushes an element onto the stack represented by this deque (in other
* words, at the head of this deque) 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.
+ * immediately without violating capacity restrictions, throwing an
+ * {@code IllegalStateException} if no space is currently available.
*
* This method is equivalent to {@link #addFirst}.
*
@@ -487,35 +489,37 @@ public interface Deque extends Queue<
/**
* Removes the first occurrence of the specified element from this deque.
* If the deque does not contain the element, it is unchanged.
- * More formally, removes the first element e such that
- * (o==null ? e==null : o.equals(e))
- * (if such an element exists).
- * Returns true if this deque contained the specified element
+ * More formally, removes the first element {@code e} such that
+ * {@code Objects.equals(o, e)} (if such an element exists).
+ * Returns {@code true} if this deque contained the specified element
* (or equivalently, if this deque changed as a result of the call).
*
- * This method is equivalent to {@link #removeFirstOccurrence}.
+ *
This method is equivalent to {@link #removeFirstOccurrence(Object)}.
*
* @param o element to be removed from this deque, if present
- * @return true if an element was removed as a result of this call
+ * @return {@code true} if an element was removed as a result of this call
* @throws ClassCastException if the class of the specified element
- * is incompatible with this deque (optional)
+ * is incompatible with this deque
+ * (optional)
* @throws NullPointerException if the specified element is null and this
- * deque does not permit null elements (optional)
+ * deque does not permit null elements
+ * (optional)
*/
boolean remove(Object o);
/**
- * Returns true if this deque contains the specified element.
- * More formally, returns true if and only if this deque contains
- * at least one element e such that
- * (o==null ? e==null : o.equals(e)).
+ * Returns {@code true} if this deque contains the specified element.
+ * More formally, returns {@code true} if and only if this deque contains
+ * at least one element {@code e} such that {@code Objects.equals(o, e)}.
*
* @param o element whose presence in this deque is to be tested
- * @return true if this deque contains the specified element
- * @throws ClassCastException if the type of the specified element
- * is incompatible with this deque (optional)
+ * @return {@code true} if this deque contains the specified element
+ * @throws ClassCastException if the class of the specified element
+ * is incompatible with this deque
+ * (optional)
* @throws NullPointerException if the specified element is null and this
- * deque does not permit null elements (optional)
+ * deque does not permit null elements
+ * (optional)
*/
boolean contains(Object o);
@@ -524,7 +528,7 @@ public interface Deque extends Queue<
*
* @return the number of elements in this deque
*/
- public int size();
+ int size();
/**
* Returns an iterator over the elements in this deque in proper sequence.
@@ -533,4 +537,15 @@ public interface Deque extends Queue<
* @return an iterator over the elements in this deque in proper sequence
*/
Iterator iterator();
+
+ /**
+ * Returns an iterator over the elements in this deque in reverse
+ * sequential order. The elements will be returned in order from
+ * last (tail) to first (head).
+ *
+ * @return an iterator over the elements in this deque in reverse
+ * sequence
+ */
+ Iterator descendingIterator();
+
}