package queues; import java.util.Enumeration; /** * A queue implemented using arrays. * * Version 2. * * @author Alan L. Cox * @since 03/15/01 */ public class ArrayVers2Queue implements IQueue { private int _firstObject = 0; private int _lastObjectPlusOne = 0; private Object[] _objects = new Object[1]; private int _objectsQueued = 0; /** * @param object the object to enqueue */ public void enqueue(Object object) { if (_objectsQueued == _objects.length) { int j; Object[] newObjects = new Object[2*_objects.length]; _lastObjectPlusOne += _objects.length; for (j = _firstObject; j < _lastObjectPlusOne; j++) newObjects[j] = _objects[j % _objects.length]; _objects = newObjects; } _objects[_lastObjectPlusOne] = object; _objectsQueued++; _lastObjectPlusOne++; _lastObjectPlusOne %= _objects.length; } /** * @return the dequeued object */ public Object dequeue() { if (_objectsQueued == 0) throw new java.util.NoSuchElementException("The queue is empty."); Object object = _objects[_firstObject]; _objectsQueued--; _firstObject++; _firstObject %= _objects.length; // Java note: the mod operator return object; } /** * @return an Enumeration of the queue. */ public Enumeration enumeration() { return new Enumeration() { private int _nextObject = _firstObject; public boolean hasMoreElements() { return _nextObject < _lastObjectPlusOne; } public Object nextElement() { return _objects[_nextObject++]; } }; } }