--- jsr166/src/main/java/util/PriorityQueue.java 2003/08/13 14:11:59 1.28 +++ jsr166/src/main/java/util/PriorityQueue.java 2003/08/25 23:47:01 1.32 @@ -28,6 +28,18 @@ * elements are added to a priority queue, its capacity grows * automatically. The details of the growth policy are not specified. * + *

The Iterator provided in method {@link #iterator()} is not + * guaranteed to traverse the elements of the PriorityQueue in any + * particular order. If you need ordered traversal, consider using + * Arrays.sort(pq.toArray()). + * + *

Note that this implementation is not synchronized. + * Multiple threads should not access a PriorityQueue + * instance concurrently if any of the threads modifies the list + * structurally. Instead, use the thread-safe {@link + * java.util.concurrent.BlockingPriorityQueue} class. + * + * *

Implementation note: this implementation provides O(log(n)) time * for the insertion methods (offer, poll, * remove() and add) methods; linear time for the @@ -44,6 +56,8 @@ public class PriorityQueue extends AbstractQueue implements Queue, java.io.Serializable { + private static final long serialVersionUID = -7720805057305804111L; + private static final int DEFAULT_INITIAL_CAPACITY = 11; /** @@ -417,8 +431,7 @@ public class PriorityQueue extends Ab checkForComodification(); PriorityQueue.this.remove(lastRet); - if (lastRet < cursor) - cursor--; + cursor--; lastRet = 0; expectedModCount = modCount; } @@ -450,8 +463,6 @@ public class PriorityQueue extends Ab * Removes and returns the ith element from queue. Recall * that queue is one-based, so 1 <= i <= size. * - * XXX: Could further special-case i==size, but is it worth it? - * XXX: Could special-case i==0, but is it worth it? */ private E remove(int i) { assert i <= size; @@ -506,7 +517,7 @@ public class PriorityQueue extends Ab private void fixDown(int k) { int j; if (comparator == null) { - while ((j = k << 1) <= size) { + while ((j = k << 1) <= size && j > 0) { if (j)queue[j]).compareTo((E)queue[j+1]) > 0) j++; // j indexes smallest kid if (((Comparable)queue[k]).compareTo((E)queue[j]) <= 0) @@ -515,7 +526,7 @@ public class PriorityQueue extends Ab k = j; } } else { - while ((j = k << 1) <= size) { + while ((j = k << 1) <= size && j > 0) { if (j < size && comparator.compare((E)queue[j], (E)queue[j+1]) > 0) j++; // j indexes smallest kid if (comparator.compare((E)queue[k], (E)queue[j]) <= 0)