ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/PriorityQueue.java
(Generate patch)

Comparing jsr166/src/main/java/util/PriorityQueue.java (file contents):
Revision 1.17 by tim, Thu Jul 31 19:49:42 2003 UTC vs.
Revision 1.18 by dholmes, Mon Aug 4 01:48:39 2003 UTC

# Line 1 | Line 1
1   package java.util;
2  
3   /**
4 < * An unbounded priority queue based on a priority heap.  This queue orders
4 > * A priority queue based on a priority heap.  This queue orders
5   * elements according to an order specified at construction time, which is
6 < * specified in the same manner as {@link java.util.TreeSet} and {@link java.util.TreeMap}:
7 < * elements are ordered
6 > * specified in the same manner as {@link java.util.TreeSet} and
7 > * {@link java.util.TreeMap}: elements are ordered
8   * either according to their <i>natural order</i> (see {@link Comparable}), or
9 < * according to a {@link java.util.Comparator}, depending on which constructor is used.
10 < * The <em>head</em> of this queue is the least element with respect to the
11 < * specified ordering. If multiple elements are tied for least value, the
9 > * according to a {@link java.util.Comparator}, depending on which
10 > * constructor is used.
11 > * <p>The <em>head</em> of this queue is the <em>least</em> element with
12 > * respect to the specified ordering.
13 > * If multiple elements are tied for least value, the
14   * head is one of those elements. A priority queue does not permit
15   * <tt>null</tt> elements.
16   *
# Line 20 | Line 22
22   *
23   * <p>A priority queue has a <i>capacity</i>.  The capacity is the
24   * size of the array used internally to store the elements on the
25 < * queue.  It is always at least as large as the queue size.  As
25 > * queue, and is limited to <tt>Integer.MAX_VALUE-1</tt>.  
26 > * It is always at least as large as the queue size.  As
27   * elements are added to a priority queue, its capacity grows
28   * automatically.  The details of the growth policy are not specified.
29   *
# Line 38 | Line 41
41   * @author Josh Bloch
42   */
43   public class PriorityQueue<E> extends AbstractQueue<E>
44 <    implements Queue<E>, java.io.Serializable {
44 >    implements Sorted, Queue<E>, java.io.Serializable {
45  
46      private static final int DEFAULT_INITIAL_CAPACITY = 11;
47  
# Line 115 | Line 118 | public class PriorityQueue<E> extends Ab
118      /**
119       * Create a <tt>PriorityQueue</tt> containing the elements in the specified
120       * collection.  The priority queue has an initial capacity of 110% of the
121 <     * size of the specified collection; or 1 if the collection is empty.
121 >     * size of the specified collection (bounded by
122 >     * <tt>Integer.MAX_VALUE-1</tt>); or 1 if the collection is empty.
123       * If the specified collection
124       * implements the {@link Sorted} interface, the priority queue will be
125       * sorted according to the same comparator, or according to its elements'
# Line 141 | Line 145 | public class PriorityQueue<E> extends Ab
145  
146          this.queue = new Object[initialCapacity + 1];
147  
148 +        // FIXME: if c is larger than Integer.MAX_VALUE we'll
149 +        // overflow the array
150 +
151          if (c instanceof Sorted) {
152 <            // FIXME: this code assumes too much
146 <            this.comparator = (Comparator<? super E>) ((Sorted)c).comparator();
147 <            for (Iterator<? extends E> i = c.iterator(); i.hasNext(); )
148 <                queue[++size] = i.next();
152 >            comparator = ((Sorted)c).comparator();
153          } else {
154              comparator = null;
151            for (Iterator<? extends E> i = c.iterator(); i.hasNext(); )
152                add(i.next());
155          }
156 +
157 +        for (Iterator<? extends E> i = c.iterator(); i.hasNext(); )
158 +            add(i.next());
159      }
160  
161      // Queue Methods
# Line 158 | Line 163 | public class PriorityQueue<E> extends Ab
163      /**
164       * Add the specified element to this priority queue.
165       *
161     * @param element the element to add.
166       * @return <tt>true</tt>
167       * @throws ClassCastException if the specified element cannot be compared
168       * with elements currently in the priority queue according
169       * to the priority queue's ordering.
170 <     * @throws NullPointerException if the specified element is null.
170 >     * @throws NullPointerException if the specified element is <tt>null</tt>.
171       */
172 <    public boolean offer(E element) {
173 <        if (element == null)
172 >    public boolean offer(E o) {
173 >        if (o == null)
174              throw new NullPointerException();
175          modCount++;
176          ++size;
177  
178          // Grow backing store if necessary
179 +        // FIXME: watch for overflow
180 +        // FIXME: what if we're full?
181          while (size >= queue.length) {
182              Object[] newQueue = new Object[2 * queue.length];
183              System.arraycopy(queue, 0, newQueue, 0, queue.length);
184              queue = newQueue;
185          }
186  
187 <        queue[size] = element;
187 >        queue[size] = o;
188          fixUp(size);
189          return true;
190      }
# Line 203 | Line 209 | public class PriorityQueue<E> extends Ab
209       * with elements currently in the priority queue according
210       * to the priority queue's ordering.
211       */
212 <    public boolean add(E element) {
213 <        return super.add(element);
212 >    public boolean add(E o) {
213 >        return super.add(o);
214      }
215  
216      /**
211     * @throws NullPointerException if any element is <tt>null</tt>.
217       * @throws ClassCastException if any element cannot be compared
218       * with elements currently in the priority queue according
219       * to the priority queue's ordering.
220 +     * @throws NullPointerException if <tt>c</tt> or any element in <tt>c</tt>
221 +     * is <tt>null</tt>
222       */
223      public boolean addAll(Collection<? extends E> c) {
224          return super.addAll(c);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines