java - 什么数据结构可以用于循环操作?

标签 java queue circular-buffer

什么数据结构最适合存储循环中的对象?比如我有一个对象列表,A,B,C,D,E,我需要循环处理它们,A->B->C->D->E,然后E->A->B->C->D-...

处理这种情况的最佳方法是什么?谢谢。我正在考虑圆形数组,但根据维基百科,圆形数组最适合用于实现队列。

最佳答案

您可以自己编写 - 这非常简单。

这使得任何 Iterable 都是循环的——但如果给定一个空集合,则会自旋。解决这个问题留给学生,但请记住 Queue 也是一个 Collection

class Circular<T> implements Iterable<T> {
    final Iterable<T> it;

    public Circular(Iterable<T> it) {
        this.it = it;
    }

    @Override
    public Iterator<T> iterator() {
        return new CircularIterator();
    }

    private class CircularIterator implements Iterator<T> {
        // Start the ball rolling.
        Iterator<T> i = it.iterator();

        @Override
        public boolean hasNext() {
            // We're circular - we always have a next.
            return true;
        }

        @Override
        public T next() {
            // Will loop until collection has elements. Could be a Queue of course.
            while (!i.hasNext()) {
                i = it.iterator();
            }
            return i.next();
        }

    }
}

public void test() {
    List<String> l = Arrays.asList("A", "B", "C", "D");
    int i = 0;
    for (String s : new Circular<String>(l)) {
        System.out.println(s);
        if (i++ > 10) {
            break;
        }
    }
}

关于java - 什么数据结构可以用于循环操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24619888/

相关文章:

postgresql - 在 php 和 postgres 中排队

java - 是否有任何 Java 库提供随机访问队列实现?

c++ - boost 环形缓冲区索引顺序,C++

c++ - 队列实现错误 C++

java - UVA 822 测试用例

c++ - boost circular_buffer 或堆排序性能

java - 从 Swing 应用程序中的 EDT 事件处理程序代码内部启动线程

java - 计算数组中元素的总和

java - Android Studio : NavigationDrawer displaying a black screen

java - 该方法必须返回int类型的结果