是';hasNext';必须在';下一个';如果大小在java中是已知的?

是';hasNext';必须在';下一个';如果大小在java中是已知的?,java,iterator,Java,Iterator,如果列表的大小已知,则只调用'next'而不调用'hasNext'。是这样吗 final List=[1,2,3]; 最终迭代器iter=list.Iterator(); 对于(int i=0;i

如果列表的大小已知,则只调用'next'而不调用'hasNext'。是这样吗

final List=[1,2,3];
最终迭代器iter=list.Iterator();
对于(int i=0;i是的,这是允许的。在您的示例中,它没有太多意义(您最好使用
list.get(i)
或使用
hasNext()
/
next()
),但它不会破坏任何东西

在不带hasNext()的情况下,您确实可以看到
next()
的一个地方是从已知不为空的集合中获取任意项。这个成语有时会出现:

Collection myCollection=。。。;
如果(!myCollection.isEmpty()){
返回myCollection.iterator().next();
}

是的,这是允许的。在您的示例中,它没有太多意义(您最好使用
list.get(i)
或使用
hasNext()
/
next()
),但它不会破坏任何东西

在不带hasNext()的情况下,您确实可以看到
next()
的一个地方是从已知不为空的集合中获取任意项。这个成语有时会出现:

Collection myCollection=。。。;
如果(!myCollection.isEmpty()){
返回myCollection.iterator().next();
}

如果没有下一个元素,而您仍然调用
next()
,那么您将得到
NoTouchElementException
。为了防止出现这种情况,您需要使用
hasNext()
进行预检查

在您的示例中,您已经知道大小和条件
i
防止您尝试在最后一个元素之后跳转,因此调用
hasNext()
没有意义

我们通常会:

while (iterator.hasNext()) { //protection against jumping after the last element
    //call next()
}
您也做了类似的事情,只是“保护”有点不同(但有效):

for(…i

因此,无需在此处使用
hasNext()

如果没有下一个元素,您仍然调用
next()
,您将得到
NoTouchElementException
。为了防止出现这种情况,您需要使用
hasNext()
进行预检查

在您的示例中,您已经知道大小和条件
i
防止您尝试在最后一个元素之后跳转,因此调用
hasNext()
没有意义

我们通常会:

while (iterator.hasNext()) { //protection against jumping after the last element
    //call next()
}
您也做了类似的事情,只是“保护”有点不同(但有效):

for(…i

因此无需在此处使用
hasNext()

您可以,但是使用这样的循环会破坏使用迭代器的目的。您尝试过吗?有效吗?问题的目的是什么?是“can you?”(Yes)还是“When you?”(No)另外,
for(Integer i:list)
更简单。
next()
不在乎您是否调用了
hasNext()
;如果存在“下一个”项,
next()
将返回该项
hasNext()
只是确定“下一个”项是否确实存在的典型方法(但肯定不是唯一的方法)。您可以,但使用这样的循环会破坏使用迭代器的目的。您尝试过吗?有效吗?问题的目的是什么?是“can you?”(Yes)还是“When you?”(No)另外,
for(Integer i:list)
更简单。
next()
不在乎您是否调用了
hasNext()
;如果存在“下一个”项,
next()
将返回该项
hasNext()
只是确定“下一个”项目是否存在的典型方法(但肯定不是唯一方法)。