public Locator min () throws PriorityQueueEmptyException {
    if (S.isEmpty())
      throw new PriorityQueueEmptyException("The priority queue is empty");
    else
      return (Locator) S.first().element();
    }
    public void insert(Locator loc) throws InvalidKeyException {
      locInsert((Item2) loc);
    }
    public Locator insert(Object k, Object e) throws InvalidKeyException {
      Item2 locitem = new Item2(k, e, null);
      return locInsert(locitem);
    }
    public void insertItem (Object k, Object e) throws InvalidKeyException {
      insert(k, e);
    }
    public void remove(Locator loc) {
      locRemove(loc);
    }
    public Object removeMin () throws PriorityQueueEmptyException {
      Object toReturn = minElement();
      remove(min());
      return toReturn;
    }
    public Object replaceElement (Locator loc, Object newElement) {
      Object oldElement = ((Item2) loc).element();
      ((Item2) loc).setElement(newElement);
      return oldElement;
    }
    public Object replaceKey(Locator loc, Object newKey)
      throws InvalidKeyException {
	Item2 locitem = locRemove(loc);
	Object oldKey = ((Item2) loc).key();
	locitem.setKey(newKey);
	locInsert(locitem);
	return oldKey;
    }
}