import java.util.NoSuchElementException; public class ArrayQueue implements Queue { final static int DEFAULT_SIZE= 16; private Object[] queue; private int front=0; private int rear=0; private int size; public ArrayQueue() { size= DEFAULT_SIZE; queue= new Object[size]; } public void add(Object o) { int next = (rear+1) % size; if ( next == front) grow(); rear = next; queue[rear] = o; } public Object remove() throws NoSuchElementException { if ( isEmpty() ) throw new NoSuchElementException(); else { front = (front+1) % size; return queue[front]; } } public boolean isEmpty() { return (front == rear); } public void clear() { front= rear= 0; } private void grow() { Object[] old= queue; int oldSize= size; size *= 2; queue= new Object[size]; if ( front < rear ) { System.arraycopy(old, front, queue, front, rear - front + 1); } else if ( rear < front ) { System.arraycopy(old, 0, queue, 0, rear + 1); System.arraycopy(old, front, queue, oldSize + front, oldSize - front); } // else if rear == front, no hay nada que copiar } }