Java迭代器无限循环

Ann*_*era 4 java iteration iterator loops list

无法弄清楚为什么这是无限循环.

public void DLCCheck(IconSet iconSet) {
    Log.d(TAG, "Got dlc check. Looking to see if we need to remove any notes from the current list.");
    int foundCount = 0;
    for(Iterator<Item> i = mItemList.iterator(); i.hasNext(); ) {
         if(i instanceof NoteItem && ((NoteItem) i).getIconSet() == iconSet) {
             i.remove();
             foundCount++;
         }
    }
    Log.d(TAG, "Finished searching. Found " + foundCount + "notes in the current list to delete.");
    //notifyDataSetChanged();
    //EventBus.getDefault().post(new MoveNoteListOut());
}
Run Code Online (Sandbox Code Playgroud)

当hasNext返回false时,这不应该停止迭代吗?此列表中只有6个项目,但它永远循环.

Lui*_*oza 11

你永远不会打电话i.next().另外,iinstanceof Iterator,所以i instanceof NoteItem永远不会true.您应该阅读数据i.next()并根据您的条件评估此类元素.

这是代码应该如何:

for(Iterator<Item> i = mItemList.iterator(); i.hasNext(); ) {
     Item item = i.next();
     if(item instanceof NoteItem && ((NoteItem) item).getIconSet() == iconSet) {
                                 //here ---------------------------^^
                                 //not sure what type returns getIconSet
                                 //but if it's not a primitive then you should use equals
         i.remove();
         foundCount++;
     }
}
Run Code Online (Sandbox Code Playgroud)