我们应该避免在Iterator中调用hasNext()吗?

dip*_*ipu 2 java iterator

是否建议不要在循环遍历迭代器时使用iterator.hasNext()?

例如,我想将值obj设置为列表的每个元素.我可以使用以下代码或通过在循环中使用hasNext()使其更具可读性.

int size = list.size();
ListIterator<? super T> itr = list.listIterator();
for (int i=0; i<size; i++) {
     itr.next();
     itr.set(obj);
}
Run Code Online (Sandbox Code Playgroud)

我可以像下面那样编写代码而不是这些代码.

for (ListIterator<? super T> itr = list.listIterator(); itr.hasNext(); ) {
    itr.next();
    itr.set(obj);
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

是否建议不要在循环遍历迭代器时使用iterator.hasNext()?

不.hasNext是迭代器迭代的标准方法.例如,这就是增强型for语句在可迭代的幕后所做的事情.

话虽如此,您的代码已经是特定于ListIterator的,正如您所使用的那样ListIterator.set- 因此您的第二个代码块目前不会实际编译.即使它确实如此,它仍然无法工作,因为你仍然需要打电话next().这会工作:

for (ListIterator<? super T> itr = list.listIterator(); itr.hasNext(); ) {
    itr.next();
    itr.set(obj);
}
Run Code Online (Sandbox Code Playgroud)