Pokud se chceme vyhnout nutnosti přesouvat prvky pole , můžeme využít variantu založenou na cyklickém přidělování prvků statického pole. Zkuste si představit pole, do něhož budeme ukládat hodnoty, jako proužek papíru rozdělený na jednotlivé buňky a na koncích slepený tak, že za posledním prvkem pole následuje opět první prvek. Jednotlivé hodnoty pak budeme mít uložené v souvislé řadě kdekoliv v tomto poli, přičemž si budeme pamatovat pouze index, od kterého budeme prvky vybírat, a index, za který budeme prvky vkládat. Pokud by se stalo, že se oba indexy někde „potkají,“ znamená to, že došlo k zaplnění celého pole.
public class CyclicArrayQueue implements Queue { public CyclicArrayQueue(int size) { _data = new Object[size]; } public void enqueue(Object obj) { _data[_last] = obj; if( ++_last == _data.length ) _last = 0; assert _first != _last : "Fronta je plna"; } public Object dequeue() { assert _first != _last : "Fronta je prazdna"; Object obj = _data[_first]; if( ++_first == _data.length ) _first = 0; return obj; } public Object front() { assert _first != _last : "Fronta je prazdna"; return _data[_first]; } public boolean empty() { return _first == _last; } protected Object[] _data; protected int _first = 0; protected int _last = 0; }