Java 列表最佳实践

标签 java iteration containers

我需要一些容器来保存元素,因此,如果我尝试获取 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/

相关文章:

java - 如何在此代码中使用 while 循环?

python - 什么是迭代器、可迭代和迭代?

c++ - 安全使用 C++ STL 的规则/指南

包含用户定义类型指针的 C++ vector

python - 如何在遍历 pandas 数据框时创建新列并插入行值

azure - 在 Azure 应用服务上为容器启用 SSH 会将垃圾转储到日志流中,我做错了什么吗?

java - 如何以用户友好的方式过滤错误消息,而无需在 Android 中创建自定义字符串?

java - 使用指向 HDFS 的 URI 创建文件实例

Java异常消息长度

R - 循环遍历列表并计算要存储在矩阵中的值