# Class PriorityQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.PriorityQueue<E>

All Implemented Interfaces:
  `Iterable<E>, Collection<E>, Queue<E>`

public class PriorityQueue<E> extends AbstractQueue<E>

A PriorityQueue holds elements on a priority heap, which orders the elements according to their natural order or according to the comparator specified at construction time. If the queue uses natural ordering, only elements that are comparable are permitted to be inserted into the queue.

The least element of the specified ordering is stored at the head of the queue and the greatest element is stored at the tail of the queue.

A PriorityQueue is not synchronized. If multiple threads will have to access it concurrently, use the `java.util.concurrent.PriorityBlockingQueue`.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PriorityQueue()`
  Constructs a priority queue with an initial capacity of 11 and natural ordering.
  `PriorityQueue(int initialCapacity)`
  Constructs a priority queue with the specified capacity and natural ordering.
  `PriorityQueue(int initialCapacity, Comparator<? super E> comparator)`
  Constructs a priority queue with the specified capacity and comparator.
  `PriorityQueue(Collection<? extends E> c)`
  Constructs a priority queue that contains the elements of a collection.
  `PriorityQueue(PriorityQueue<? extends E> c)`
  Constructs a priority queue that contains the elements of another priority queue.
  `PriorityQueue(SortedSet<? extends E> c)`
  Constructs a priority queue that contains the elements of a sorted set.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `add(E o)`
  Adds the specified object to the priority queue.
  `void`
  `clear()`
  Removes all the elements of the priority queue.
  `Comparator<? super E>`
  `comparator()`
  Gets the comparator of the priority queue.
  `boolean`
  `contains(Object object)`
  Answers if there is an element in this queue equals to the object.
  `Iterator<E>`
  `iterator()`
  Gets the iterator of the priority queue, which will not return elements in any specified ordering.
  `boolean`
  `offer(E o)`
  Inserts the element to the priority queue.
  `E`
  `peek()`
  Gets but does not remove the head of the queue.
  `E`
  `poll()`
  Gets and removes the head of the queue.
  `boolean`
  `remove(Object o)`
  Removes the specified object from the priority queue.
  `int`
  `size()`
  Gets the size of the priority queue.
  `Object[]`
  `toArray()`
  Returns all the elements in an array.
  `<T> T[]`
  `toArray(T[] array)`
  Returns all the elements in an array, and the type of the result array is the type of the argument array.

  ### Methods inherited from class AbstractQueue

  `addAll, element, remove`

  ### Methods inherited from class AbstractCollection

  `containsAll, isEmpty, removeAll, retainAll, toString`

  ### Methods inherited from class Object

  `clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface Collection

  `containsAll, equals, hashCode, isEmpty, removeAll, retainAll`

- ## Constructor Details

  - ### PriorityQueue

    public PriorityQueue()
    Constructs a priority queue with an initial capacity of 11 and natural ordering.

  - ### PriorityQueue

    public PriorityQueue(int initialCapacity)

    Constructs a priority queue with the specified capacity and natural ordering.

    ###### Parameters

    - `initialCapacity`: the specified capacity.

    ###### Throws

    - `IllegalArgumentException`: if the initialCapacity is less than 1.

  - ### PriorityQueue

    public PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

    Constructs a priority queue with the specified capacity and comparator.

    ###### Parameters

    - `initialCapacity`: the specified capacity.

    - `comparator`: @param comparator the specified comparator. If it is null, the natural ordering will be used.

    ###### Throws

    - `IllegalArgumentException`: if the initialCapacity is less than 1.

  - ### PriorityQueue

    public PriorityQueue(Collection<? extends E> c)

    Constructs a priority queue that contains the elements of a collection. The constructed priority queue has the initial capacity of 110% of the size of the collection. The queue uses natural ordering to order its elements.

    ###### Parameters

    - `c`: @param c the collection whose elements will be added to the priority queue to be constructed.

    ###### Throws

    - `ClassCastException`: if any of the elements in the collection are not comparable.

    - `NullPointerException`: if any of the elements in the collection are null.

  - ### PriorityQueue

    public PriorityQueue(PriorityQueue<? extends E> c)

    Constructs a priority queue that contains the elements of another priority queue. The constructed priority queue has the initial capacity of 110% of the specified one. Both priority queues have the same comparator.

    ###### Parameters

    - `c`: @param c the priority queue whose elements will be added to the priority queue to be constructed.

  - ### PriorityQueue

    public PriorityQueue(SortedSet<? extends E> c)

    Constructs a priority queue that contains the elements of a sorted set. The constructed priority queue has the initial capacity of 110% of the size of the sorted set. The priority queue will have the same comparator as the sorted set.

    ###### Parameters

    - `c`: @param c the sorted set whose elements will be added to the priority queue to be constructed.

- ## Method Details

  - ### iterator

    public Iterator<E> iterator()

    Gets the iterator of the priority queue, which will not return elements in any specified ordering.

    ###### Returns

    the iterator of the priority queue.

    Specified by:
      `iterator` in interface `Collection<E>`
    Specified by:
      `iterator` in interface `Iterable<E>`
    Specified by:
      `iterator` in class `AbstractCollection<E>`

  - ### size

    public int size()

    Gets the size of the priority queue. If the size of the queue is greater than the Integer.MAX, then it returns Integer.MAX.

    ###### Returns

    the size of the priority queue.

    Specified by:
      `size` in interface `Collection<E>`
    Specified by:
      `size` in class `AbstractCollection<E>`
    Returns:
      how many objects this `Collection` contains, or `Integer.MAX_VALUE` if there are more than `Integer.MAX_VALUE` elements in this `Collection`.

  - ### clear

    public void clear()
    Removes all the elements of the priority queue.
    Specified by:
      `clear` in interface `Collection<E>`
    Overrides:
      `clear` in class `AbstractQueue<E>`

  - ### offer

    public boolean offer(E o)

    Inserts the element to the priority queue.

    ###### Parameters

    - `o`: the element to add to the priority queue.

    ###### Returns

    always true

    ###### Throws

    - `ClassCastException`: @throws ClassCastException if the element cannot be compared with the elements in the priority queue using the ordering of the priority queue.

    - `NullPointerException`: if `o` is `null`.

    Returns:
      `true` if the operation succeeds and `false` if it fails.

  - ### poll

    public E poll()

    Gets and removes the head of the queue.

    ###### Returns

    the head of the queue or null if the queue is empty.

    Returns:
      the element at the head of the queue or `null` if there is no element in the queue.

  - ### peek

    public E peek()

    Gets but does not remove the head of the queue.

    ###### Returns

    the head of the queue or null if the queue is empty.

    Returns:
      the element at the head of the queue or `null` if there is no element in the queue.

  - ### comparator

    public Comparator<? super E> comparator()

    Gets the comparator of the priority queue.

    ###### Returns

    Returns:
      the comparator of the priority queue or null if the natural ordering is used.

  - ### remove

    public boolean remove(Object o)

    Removes the specified object from the priority queue.

    ###### Parameters

    - `o`: the object to be removed.

    ###### Returns

    Specified by:
      `remove` in interface `Collection<E>`
    Overrides:
      `remove` in class `AbstractCollection<E>`
    Returns:
      true if the object was in the priority queue, false if the object was not in the priority queue.

  - ### add

    public boolean add(E o)

    Adds the specified object to the priority queue.

    ###### Parameters

    - `o`: the object to be added.

    ###### Returns

    always true.

    ###### Throws

    - `ClassCastException`: @throws ClassCastException if the element cannot be compared with the elements in the priority queue using the ordering of the priority queue.

    - `NullPointerException`: if `o` is `null`.

    Specified by:
      `add` in interface `Collection<E>`
    Overrides:
      `add` in class `AbstractQueue<E>`
    Returns:

      `true` if this `Collection` is modified, `false` otherwise.

      ###### Throws

      - `UnsupportedOperationException`: if adding to this `Collection` is not supported.

      - `ClassCastException`: @throws ClassCastException if the class of the object is inappropriate for this collection.

      - `IllegalArgumentException`: if the object cannot be added to this `Collection`.

      - `NullPointerException`: if null elements cannot be added to the `Collection`.

  - ### contains

    public boolean contains(Object object)

    Answers if there is an element in this queue equals to the object.

    ###### See also

    - java.util.AbstractCollection#contains(java.lang.Object)
    Specified by:
      `contains` in interface `Collection<E>`
    Overrides:
      `contains` in class `AbstractCollection<E>`
    Returns:

      `true` if object is an element of this `Collection`, `false` otherwise.

      ###### Throws

      - `ClassCastException`: @throws ClassCastException if the object to look for isn't of the correct type.

      - `NullPointerException`: @throws NullPointerException if the object to look for is `null` and this `Collection` doesn't support `null` elements.

  - ### toArray

    public Object[] toArray()

    Returns all the elements in an array. The result is a copy of all the elements.

    ###### Returns

    the Array of all the elements

    ###### See also

    - java.util.AbstractCollection#toArray()
    Specified by:
      `toArray` in interface `Collection<E>`
    Overrides:
      `toArray` in class `AbstractCollection<E>`

  - ### toArray

    public <T> T[] toArray(T[] array)

    Returns all the elements in an array, and the type of the result array is the type of the argument array. If the argument array is big enough, the elements from the queue will be stored in it(element immediately following the end of the queue is set to null, if any); otherwise, it will return a new array with the size of the argument array and size of the queue.

    Type parameter `T`: the type of elements in the array

    ###### Parameters

    - `array`: @param array the array stores all the elements from the queue, if it has enough space; otherwise, a new array of the same type and the size of the queue will be used

    ###### Returns

    the Array of all the elements

    ###### Throws

    - `ArrayStoreException`: @throws ArrayStoreException if the type of the argument array is not compatible with every element in the queue

    - `NullPointerException`: if the argument array is null

    ###### See also

    - java.util.AbstractCollection#toArray(T[])
    Specified by:
      `toArray` in interface `Collection<E>`
    Overrides:
      `toArray` in class `AbstractCollection<E>`