A PriorityQueue is data structure based on Queue. Unlike Queue,
the elements on PriorityQueue are not returned in FIFO order.
A PriorityQueue maintains the natural order of its elements or it
uses a Comparator provided at initialization.
It is an unbounded queue based on a priority heap.
PriorityQueue does not allow null values. We cannot add any object
that does not provide natural ordering to PriorityQueue.
PriorityQueue in Java is not thread-safe.
It gives O(log n) time for enqueing and dequeing operations.