我在JavaDoc中搜索过,java中的Iterator是接口。但是如果它是接口那么在哪里实现 hasNext , next ,删除迭代器接口的方法。
我试图在Stackoverflow中搜索这个问题,然后我想出了这个帖子。
正如上面提到的那样,它的实现是隐藏的,但为什么它被隐藏?
答案 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方法的实现,如
答案 3 :(得分:0)
经过一些研究后,我想出了这个答案来解释更好的场景,迭代器的实现是作为内部类完成的。原因 ?阅读图片:
参考:Java教程,第3版。