概述
如果列表只有一个元素,那就更清楚了,让我们说“b”. hasNext()实际上会返回true,而next()会读取它,迭代将在此之后结束.
说明:
如果你打电话给Iterator< Object>任何非空列表上的it = list.iterator()(即使它只有一个元素),调用hasNext()时也是如此.那是因为迭代器在第一个元素之前被初始化:
b u n g i o r n o
^
i - iterator
当你调用next()时它会做两件事:
>它读取迭代器前面的元素,
>在刚刚读取的元素之后和下一个元素之前移动迭代器.
在你的例子中 – 它打印“b”并在“u”之前停止:
b u n g i o r n o
^
i
就在结束之前:
b u n g i o r n o
^
i
它实际上有下一个值 – “o”.调用next()将读取该值并在o之后跳转.没有更多的元素. hasNext()将显示false,调用next()将导致异常.
技术细节:
如何实现迭代器的基本思想是:
– 当通过调用List上的iterator()创建Iterator时,其名为next的内部变量指向列表的第一个元素.
– hasNext()只检查下一个是否是!= null.
– next()返回next并设置next以显示下一个元素.
这是java.util.ArrayList Iterator(省略了一些细节):
public Iterator iterator() {
return new Itr();
}
private class Itr implements Iterator {
int cursor; // index of next element to return
int lastRet = -1; // index of last element returned; -1 if no such
int expectedModCount = modCount;
public boolean hasNext() {
return cursor != size;
}
public E next() {
checkForComodification();
int i = cursor;
Object[] elementData = ArrayList.this.elementData;
cursor = i + 1;
return (E) elementData[lastRet = i];
}
}
最后
以上就是活泼香水为你收集整理的java hasnextstring_Java – ListIterator和hasNext的全部内容,希望文章能够帮你解决java hasnextstring_Java – ListIterator和hasNext所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复