使用迭代器时无限循环

Infinite loop while using iterator

Set key1 = map.keySet();
Iterator it1 = key1.iterator();
int cnt=0;
while (it1.hasNext()) {
  cnt++;
}

此代码导致无限循环的可能性有多大?

实际上是死循环。我怀疑是因为我没有服用 it1.next(); ,是真的吗?

是的。在您不调用 it1.next() 之前,它永远不会转到下一个项目。因为 it1.next() 将 return 您在 list/set.

中添加的对象

问题是,您没有在循环中调用 it1.next(),因此 it1.hasNext() 始终为真。换句话说,您永远不会移动到下一个项目。

顺便说一句,你不需要迭代器来实现你想要的东西,试试

int cnt=map.size();

Actually it is resulting in infinite loop. My doubt is it is because I am not taking it1.next(); , is it true?

是的,这是真的。

但是,您可以更容易地找到集合的计数:

int cnt = map.size();

基本上 itl.hasNext() 始终 return 一个布尔值,该值基于集合中要处理的下一个值的可用性。假设指针在某个位置 x,hasNext() return 如果位置 x 旁边存在某个元素,则为真,我的意思是存在 x+1 个元素,

所以你必须使用itl.next(),它return是集合中的当前元素并将指针向前移动1。所以根据我们前面的例子,next() returns当前对象a位置x,移动指针到下一个点。

但是,要从集合中获取元素的数量,您可以使用

 collection_object.size()