我有一个 ArrayList,它有时可以在不同位置包含值“Time (GMT)”、“None”和“No Sensor”。我想删除这些的所有实例,所以我写了这个小 for 循环:
for(int i = 0; i < trackedFieldsMod.size(); i++ ) {
if(trackedFieldsMod.get(i).equalsIgnoreCase("Time (GMT)") || trackedFieldsMod.get(i).equalsIgnoreCase("None") || trackedFieldsMod.get(i).equalsIgnoreCase("No Sensor")) {
trackedFieldsMod.remove(i); //Don't let users find average/mean/etc for irrelevant fields
}
}
出于某种原因,这将删除列表开头的“时间(格林威治标准时间)”,以及列表末尾的任何“无”或“无传感器”,但如果我的 ArrayList 有一个“无”或中间任何地方的“无传感器”,都不会被删除。我一辈子都想不通为什么。有什么想法吗?谢谢!
最佳答案
当您删除位于位置 i 的列表项时,以前位于 i + 1 的项目将移动到 i(所有内容都向 i 移动 1 个单元格)。
但是,在您的下一个 for 循环迭代中 i 变为 i + 1 所以基本上您跳过了之前在您的删除操作中从 i + 1 移动到 i 的项目。删除项目时需要递减 i。
关于java - 从 ArrayList 中删除具有特定名称的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11211778/