实际上java中的iterator是什么?

时间:2015-07-04 09:01:36

标签: java iterator

我在JavaDoc中搜索过,java中的Iterator是接口。但是如果它是接口那么在哪里实现 hasNext next 删除迭代器接口的方法。

我试图在Stackoverflow中搜索这个问题,然后我想出了这个帖子。

Where are Iterator interface methods hasNext(), next(), remove() defined? Because interfaces never define methods only declare

正如上面提到的那样,它的实现是隐藏的,但为什么它被隐藏?

4 个答案:

答案 0 :(得分:1)

根据我的理解,您实现了这些方法,使您的数据结构符合接口。 hasNext()next()remove()方法没有可用的实现。

具体类具有这些的实现(默认实现)。就像LinkedList按顺序遍历。对于以任何其他顺序迭代,您可以实现接口。下面是一个以相反顺序迭代的示例:

@Override
public Iterator<Type> iterator() {
    Iterator<Type> it = new Iterator<Type>() {

        private int currentIndex = arrayList.size();

        @Override
        public boolean hasNext() {
            return arrayList[currentIndex] != null;
        }

        @Override
        public Type next() {
            return arrayList[currentIndex--];
        }

        @Override
        public void remove() {
            throw new UnsupportedOperationException();
        }
    };
    return it;
}

答案 1 :(得分:1)

这就是界面的想法。通常在编程中,对象之间的连接越少越好。只有用于集合的接口才会被有意地暴露。期望从客户端到不知道(或者更好的是没有理由知道)迭代器的实现如何,客户端期望从迭代器描述行为 - 检查是否有下一个元素,获取下一个元素。如何实施它是无关紧要的,只有这对他很重要。关键是你要使用它,你只应该知道迭代器本身的概念。

这就是隐藏的原因

答案 2 :(得分:1)

接口只是蓝图。他们告诉了什么,而不是如何。实现X接口的类(例如迭代器)必须告诉如何做。如果您查看ArrayList的源代码,您将看到Iterator方法的实现,如ArrayList.java

答案 3 :(得分:0)

经过一些研究后,我想出了这个答案来解释更好的场景,迭代器的实现是作为内部类完成的。原因 ?阅读图片:

参考:Java教程,第3版。

enter image description here enter image description here