a-maze-ing / CSE 373 PT / heap / src / priorityqueues / ExtrinsicMinPQ.java
ExtrinsicMinPQ.java
Raw
package priorityqueues;

import java.util.NoSuchElementException;

/**
 * Priority queue where objects have a priority that is provided extrinsically,
 * i.e., priorities are supplied as an argument during insertion and can be changed
 * using the changePriority method. Cannot contain duplicate or null items.
 */
public interface ExtrinsicMinPQ<T> {

    /**
     * Adds an item with the given priority value.
     * @throws IllegalArgumentException if item is null or is already present in the PQ
     */
    void add(T item, double priority);

    /** Returns true if the PQ contains the given item; false otherwise. */
    boolean contains(T item);

    /**
     * Returns the item with the least-valued priority.
     * @throws NoSuchElementException if the PQ is empty
     */
    T peekMin();

    /**
     * Removes and returns the item with the least-valued priority.
     * @throws NoSuchElementException if the PQ is empty
     */
    T removeMin();

    /**
     * Changes the priority of the given item.
     * @throws NoSuchElementException if the item is not present in the PQ
     */
    void changePriority(T item, double priority);

    /** Returns the number of items in the PQ. */
    int size();

    /** Returns true if the PQ is empty; false otherwise. */
    default boolean isEmpty() {
        return size() == 0;
    }
}