code: package edu.berkeley.nlp.util;
  
  public interface PriorityQueueInterface<E> {
  
  	/**
  	 * Returns true if the priority queue is non-empty
  	 */
  	public abstract boolean hasNext();
  
  	/**
  	 * Returns the element in the queue with highest priority, and pops it from
  	 * the queue.
  	 */
  	public abstract E next();
  
  	/**
  	 * Not supported -- next() already removes the head of the queue.
  	 */
  	public abstract void remove();
  
  	/**
  	 * Returns the highest-priority element in the queue, but does not pop it.
  	 */
  	public abstract E peek();
  
  	/**
  	 * Gets the priority of the highest-priority element of the queue.
  	 */
  	public abstract double getPriority();
  
  	/**
  	 * Number of elements in the queue.
  	 */
  	public abstract int size();
  
  	/**
  	 * True if the queue is empty (size == 0).
  	 */
  	public abstract boolean isEmpty();
  
  	/**
  	 * Adds a key to the queue with the given priority. If the key is already in
  	 * the queue, it will be added an additional time, NOT promoted/demoted.
  	 * 
  	 * @param key
  	 * @param priority
  	 */
  	public abstract void put(E key, double priority);
  
  }