package CircularArrayQueueTest; import java.util.AbstractQueue; import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.NoSuchElementException; public class CircularArrayQueue<E> extends AbstractQueue<E> { /** * Creaza o coada goala * @param capacity Volumul Maxim */ @SuppressWarnings("unchecked") public CircularArrayQueue(int capacity) { elements = (E[]) new Object[capacity]; count = 0; head = 0; tail = 0; } @Override public boolean offer(E newElement) { // TODO Auto-generated method stub assert newElement != null; if(count < elements.length) { elements[tail] = newElement; tail = (tail+1)% elements.length; count++; modCount++; return true; } else { return false; } } @Override public E peek() { // TODO Auto-generated method stub if(count == 0) return null; E r = elements[head]; head = (head+1) % elements.length; count--; modCount--; return r; } @Override public E poll() { // TODO Auto-generated method stub if(count == 0) return null; E r = elements[head]; head = (head + 1) % elements.length; count --; modCount --; return r; } @Override public Iterator<E> iterator() { // TODO Auto-generated method stub return new QueueIterator(); } @Override public int size() { // TODO Auto-generated method stub return count; } private E[] elements; private int head; private int tail; private int count; private int modCount; private class QueueIterator implements Iterator<E> { public QueueIterator() { modcountAtConstruction = modCount; } @Override public boolean hasNext() { // TODO Auto-generated method stub if(modCount != modcountAtConstruction) { throw new ConcurrentModificationException(); } return offset < elements.length; } @Override public E next() { // TODO Auto-generated method stub if(!hasNext()) throw new NoSuchElementException(); E r = elements[(head + offset) % elements.length]; offset++; return r; } @Override public void remove() { // TODO Auto-generated method stub throw new UnsupportedOperationException(); } private int offset; private int modcountAtConstruction; } }