public class HeapPriorityQueue implements PriorityQueue { 
  HeapTree T;
  Comparator comp;
  
  public HeapPriorityQueue(Comparator c) {
    if ((comp = c) == null)
      throw new IllegalArgumentException("Null comparator passed");
    T = new VectorHeapTree();
  }
  
  public int size() {
    return (T.size() - 1) / 2;
  }
  
  public boolean isEmpty() {
    return T.size() == 1; }
  
  public Object minElement() throws PriorityQueueEmptyException {
    if (isEmpty())
      throw new PriorityQueueEmptyException("Empty Priority Queue");
    return element(T.root());
  }
  
  public Object minKey() throws PriorityQueueEmptyException {
    if (isEmpty())
      throw new PriorityQueueEmptyException("Empty Priority Queue");
    return key(T.root());
  }