Вы можете создать простой подкласс ArrayList<T>
и переопределить метод get(int n)
следующим образом:
public T get(int n)
{
return super.get(n % this.size());
}
Что касается итератора, вам потребуется реализовать свой собственный, который не должен бытьвсе это сложно.
РЕДАКТИРОВАТЬ:
Предполагая, что ваш новый класс называется RingList, вот пример RingIterator (не проверено):
public class RingIterator<T> implements Iterator<T>
{
private int cur = 0;
private RingList<T> coll = null;
protected RingIterator(RingList<T> coll) { this.coll = coll; }
public boolean hasNext() { return size() > 0; }
public T next()
{
if (!hasNext())
throw new NoSuchElementException();
int i=cur++;
cur=cur%size();
return coll.get(i);
}
public void remove() { throw new UnsupportedOperationException(); }
}
Затем вы переопределите iterator()
метод в RingList<T>
как
public Iterator<T> iterator()
{
return new RingIterator(this);
}