java - 在同一个类中实现 Java Iterator 和 Iterable?

标签 java iterator iterable

我正在尝试理解 Java IteratorIterable 接口(interface)

我正在写这个类

class MyClass implements Iterable<String> {
    public String[] a = null;
    public MyClass(String[] arr) {
        a = arr;    
    }

    public MyClassIterator iterator() {
        return new MyClassIterator(this);
    }

    public class MyClassIterator implements Iterator<String> {
        private MyClass myclass = null;
        private int count = 0;
        public MyClassIterator(MyClass m) {
            myclass = m;    
        }

        public boolean hasNext() {
            return count < myclass.a.length;
        }
        public String next() {
            int t = count;
            count++;
            return myclass.a[t];
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    }   
}

它似乎在起作用。

我应该:

Myclass implements Iterable<Stirng>, Iterator<String> {

}

或者我应该将 MyClassIterator 放在 MyClass 之外作为

class MyClass implements Iterable<String> {
    public String[] a = null;
    public MyClass(String[] arr) {
        a = arr;    
    }
    public MyClassIterator iterator() {
        return new MyClassIterator(this);
    }
}


    public class MyClassIterator implements Iterator<String> {
        private MyClass myclass = null;
        private int count = 0;
        public MyClassIterator(MyClass m) {
            myclass = m;    
        }

        public boolean hasNext() {
            return count < myclass.a.length;
        }
        public String next() {
            int t = count;
            count++;
            return myclass.a[t];
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    }   

哪个更好?

最佳答案

您几乎永远不要在同一个类中同时实现IterableIterator。他们做不同的事情。迭代器自然是有状态的 - 当您使用它进行迭代时,它必须更新它的世界观。然而,可迭代对象只需要能够创建新的迭代器。特别是,您可以让多个迭代器同时处理同一个原始可迭代对象。

您当前的方法非常好 - 我会更改实现的某些方面,但就职责分离而言很好。

关于java - 在同一个类中实现 Java Iterator 和 Iterable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836174/

相关文章:

自定义模板类的 C++ 迭代器

javascript - 在 Underscore.js 中使用 JavaScript-Iterables

java - 从父 Activity 多次调用 map Activity 并自动存储数据

java - 返回点击按钮的索引?

java - 运行 JAR 时如何配置日志记录?

java - arraylist并发修改

c++ - 遵循整数索引列表的自定义类迭代器?

Python:如何断言可迭代的第一个元素的类型?

python - Scala 中是否有与 Python 更通用的 map 函数等效的函数?

java - 您可以通过击键在 Eclipse 中组织整个项目的导入吗?