ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/AbstractQueue.java
Revision: 1.12
Committed: Wed Aug 6 01:57:53 2003 UTC (20 years, 9 months ago) by dholmes
Branch: MAIN
Changes since 1.11: +6 -1 lines
Log Message:
Final major updates to Collection related classes.

File Contents

# Content
1 /*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain. Use, modify, and
4 * redistribute this code in any way without acknowledgement.
5 */
6
7 package java.util;
8
9 /**
10 * <tt>AbstractQueue</tt> provides default implementations of
11 * {@link #add add}, {@link #remove remove}, and {@link #element element}
12 * based on
13 * {@link #offer offer}, {@link #poll poll}, and {@link #peek peek},
14 * respectively but that
15 * throw exceptions instead of indicating failure via <tt>false</tt> or
16 * <tt>null</tt> returns.
17 * <p>The provided implementations all assume that the base implementation
18 * does <em>not</em> allow <tt>null</tt> elements.
19 * @since 1.5
20 * @author Doug Lea
21 */
22 public abstract class AbstractQueue<E>
23 extends AbstractCollection<E>
24 implements Queue<E> {
25
26 // note that optional methods are not optional here or in our subclasses,
27 // so we redefine each optional method to document that it is not optional
28 // We also inherit, or define, all necessary @throws comments
29
30 /**
31 * @throws NullPointerException if the specified element is <tt>null</tt>
32 */
33 public abstract boolean offer(E o);
34
35 /**
36 * Adds the specified element to this queue.
37 * @return <tt>true</tt> (as per the general contract of
38 * <tt>Collection.add</tt>).
39 *
40 * @throws NullPointerException if the specified element is <tt>null</tt>
41 */
42 public boolean add(E o) {
43 if (offer(o))
44 return true;
45 else
46 throw new IllegalStateException("Queue full");
47 }
48
49 /**
50 * Adds all of the elements in the specified collection to this queue.
51 * The behavior of this operation is undefined if
52 * the specified collection is modified while the operation is in
53 * progress. (This implies that the behavior of this call is undefined if
54 * the specified collection is this queue, and this queue is nonempty.)
55 * <p>
56 * This implementation iterates over the specified collection, and adds
57 * each object returned by the iterator to this queue, in turn.
58 *
59 * @param c collection whose elements are to be added to this queue
60 * @return <tt>true</tt> if this collection changed as a result of the
61 * call.
62 * @throws NullPointerException if <tt>c</tt> or any element in <tt>c</tt>
63 * is <tt>null</tt>
64 *
65 */
66 public boolean addAll(Collection<? extends E> c) {
67 return super.addAll(c);
68 }
69
70 /** @throws NoSuchElementException {@inheritDoc} */
71 public E remove() {
72 E x = poll();
73 if (x != null)
74 return x;
75 else
76 throw new NoSuchElementException();
77 }
78
79 /** @throws NoSuchElementException {@inheritDoc} */
80 public E element() {
81 E x = peek();
82 if (x != null)
83 return x;
84 else
85 throw new NoSuchElementException();
86 }
87
88 /**
89 * Removes all of the elements from this collection.
90 * The collection will be empty after this call returns.
91 * <p>This implementation repeatedly invokes {@link #poll poll} until it
92 * returns <tt>null</tt>.
93 */
94 public void clear() {
95 while (poll() != null)
96 ;
97 }
98
99 // XXX Remove this redundant declaration, pending response from Neal Gafter.
100 public abstract Iterator<E> iterator();
101 }
102
103
104
105
106