2015-04-27 96 views
-2
Set key1 = map.keySet(); 
Iterator it1 = key1.iterator(); 
int cnt=0; 
while (it1.hasNext()) { 
    cnt++; 
} 

此代码将导致无限循环的机会是多少?使用迭代器的无限循环

其实它会导致无限循环。我的怀疑是因为我没有采取it1.next();,这是真的吗?

+4

是啊。这确实可以解释你的问题。 – Stultuske

+0

是的。 It1对象没有迭代到导致无限循环的下一个对象。 –

+0

如果你想知道集合中元素的数量,只需调用'key1.size()'! – isnot2bad

回答

3

是的。直到您不拨打it1.next()它将永远不会移动到下一个项目。出现it1.next()将返回您添加到列表/集合中的对象。

1

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

BTW,你不需要迭代器要archieve什么,尽量

int cnt=map.size(); 
1

实际上它是导致无限循环。我的怀疑是因为我没有采取it1.next();,这是真的吗?

是的,这是真的。

然而,你可以很容易找到一个集合的计数:

int cnt = map.size(); 
+0

是的,我发现计数,它是84,所以它必须停止在84. :)谢谢 –

1

基本上itl.hasNext()总是返回基于未来价值的可用性收集处理一个布尔值。说指针在某个位置x,hasNext()返回true,如果在位置x旁边存在某个元素,则表示x + 1元素存在,因此您必须使用itl.next(),它返回当前元素在前面的例子中,next()返回当前对象的位置x,并将指针移动到下一个位置。

但是得到从收集要素的数量,您可以使用

collection_object.size()