Java - 迭代ArrayList的问题

cc0*_*cc0 2 java collections iterator

好吧,所以我有一个ArrayList (arrBok),它充满了book对象(代码是挪威语,所以请不要注意它).我想创建一个遍历`ArrayList'中所有对象的公共方法.

当我执行代码时,它似乎只是在无限循环中运行,而不是产生任何返回值.

这是相关的(我希望,因为还有其他一些类涉及)代码的一部分;

public String listAll()
{
    itr = arrBok.iterator();
    while (itr.hasNext())
    {
        i++;
    }
    return "lol";
}
Run Code Online (Sandbox Code Playgroud)

这段代码没有任何用处,但我只是想知道它是否可以成功迭代它.

到目前为止我尝试过的;

  • 如果bokArr (ArrayList)是空的则进行测试,但事实并非如此.它里面有4个物体.

  • 返回toString()方法,itr结果如下;

java.util.AbstractList$Itr@173a10f // < - 不确定这是否与任何内容相关

  • return itr.next().toString(); < - //似乎返回数组中的第一个对象,这有意义吗?

T.J*_*der 13

引用的代码将无法编译,您缺少几个声明.但我想我得到了主旨.

hasNext告诉你迭代器一个下一个值,但不会带你到它.要做到这一点,你使用next.所以这是一个无限循环,因为你永远不会打电话next.

使用任何最新的编译器,您可以使用更简单的表示法:

for (Object book : arrBok) {
    // ...do something with 'book' (or just increment your counter)...
}
Run Code Online (Sandbox Code Playgroud)

这会为您迭代集合(在本例中为list).


Rom*_*las 7

你只是忘了"移动"到下一个元素:

while (itr.hasNext()) {
   // Get next element
   Object o = itr.next();
   // do what you want with your element...
}
Run Code Online (Sandbox Code Playgroud)

请注意,从Java 5开始,您可以使用以下语法迭代列表:

List<String> myList = getAListOfString();
for (String s : myList) {
    // Your code
}
Run Code Online (Sandbox Code Playgroud)


kuk*_*das 5

为什么不迭代这样:

for(Book book :arrBok){
  // do something
}
Run Code Online (Sandbox Code Playgroud)