我需要一些容器来保存元素,因此,如果我尝试获取 size()+i 元素,我将获得元素编号 i。或者使用迭代器,它在尝试获取最后一个元素后从容器的开头开始?这两种情况下的最佳做法是什么?我指的是性能和易用性。
最佳答案
您可以创建 ArrayList<T>
的简单子(monad)类并覆盖 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);
}
关于Java 列表最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210172/