Java迭代器无限循环
Java Iterator Infinite Loop
无法弄清楚为什么会无限循环。
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());
}
当 hasNext returns 为 false 时,这不应该停止迭代吗?此列表中只有 6 个项目,但它会永远循环。
你永远不会打电话给 i.next()
。此外,i
是 instanceof 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++;
}
}
无法弄清楚为什么会无限循环。
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());
}
当 hasNext returns 为 false 时,这不应该停止迭代吗?此列表中只有 6 个项目,但它会永远循环。
你永远不会打电话给 i.next()
。此外,i
是 instanceof 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++;
}
}