/*
 * A priority queue adds elements into positions based on their priority.
 * So the most important elements are placed at the front/on the top.
 * In this example I give numbers that are bigger, a higher priority.
 * Queues in theory have no fixed size but when using an array implementation it does.
 */
class PriorityQueue{
	private int maxSize;
	private int[] queueArray;
	private int nItems;

	public PriorityQueue(int size){ //Constructor
		maxSize = size;
		queueArray = new int[size];
		nItems = 0;
	}

	public void insert(int value){ //Inserts an element in it's appropriate place
		if(nItems == 0){
			queueArray[0] = value;
		}
		else{
			int j = nItems;
			while(j > 0 && queueArray[j-1] > value){
				queueArray[j] = queueArray[j-1]; //Shifts every element up to make room for insertion
				j--;
			}
			queueArray[j] = value; //Once the correct position is found the value is inserted
		}
		nItems++;
	}

	public int remove(){ //Remove the element from the front of the queue
		return queueArray[--nItems];
	}

	public int peek(){ //Checks what's at the front of the queue
		return queueArray[nItems-1];
	}

	public boolean isEmpty(){ //Returns true is the queue is empty
		return(nItems == 0);
	}

	public boolean isFull(){ //Returns true is the queue is full
		return(nItems == maxSize);
	}

	public int getSize(){ //Returns the number of elements in the queue
		return nItems;
	}
}
//Example
public class PriorityQueues{
	public static void main(String args[]){
		PriorityQueue myQueue = new PriorityQueue(4);
		myQueue.insert(10);
		myQueue.insert(2);
		myQueue.insert(5);
		myQueue.insert(3);
		//[2, 3, 5, 10] Here higher numbers have higher priority, so they are on the top

		for(int i = 3; i>=0; i--)
			System.out.print(myQueue.remove() + " "); //will print the queue in reverse order [10, 5, 3, 2]

		//As you can see, a Priority Queue can be used as a sorting algotithm
	}
}

Create PriorityQueues.java