为什么使用列表迭代器会永远循环?

Why does using list iterator loop forever?

在我的代码中有以下情况:

List cedolini = (List) Bean_Dati.getListaRisultati("ListaCertificazioni");

for (Iterator iterator = cedolini.iterator(); iterator.hasNext(); ) {
    System.out.println("TEST");
}

此时名为 cedolini 的列表仅包含一个元素,该元素是名为 Certificazioni 的 class 的实例,我使用调试器看到它​​。

问题是,当执行前面的代码时,它进入了一个无限循环,我没有获得在堆栈跟踪中打印的单个 TEST,而是类似的东西:

TEST
TEST
TEST
TEST
TEST
TEST
....
....
....

而且还是继续进入死循环

为什么?我错过了什么?我该如何解决这个问题?

因为你永远不会调用 iterator.next(),所以 iterator.hasNext() 将永远为真。

您没有从迭代器中提取下一个元素。在你的循环中你应该调用

iterator.next()

如果您查看 for 循环,

for (Iterator iterator = cedolini.iterator(); iterator.hasNext(); ) {

如果您不从迭代器中获取下一个元素,您将看到布尔条件 iterator.hasNext() 将始终为真,这将导致无限循环。

在你的循环中调用它

iterator.next();

发生这种情况是因为您没有更新迭代器到迭代中的下一个元素。

这就像你做的(假设有一个名为 list 的数组):

for (int i = 0; i < list.length; )
    System.out.println("TEST");

你不更新 i: i++.

你应该改变你的循环添加 iterator.next():

for (Iterator iterator = cedolini.iterator(); iterator.hasNext(); iterator.next())
    System.out.println("TEST");