从ArrayList中删除具有特定名称的项目

Nic*_*ick 1 java android arraylist

我有一个ArrayList,有时在各个位置都包含值"Time(GMT)","None"和"No Sensor".我想删除所有这些实例,所以我写了这个小循环:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这将删除列表开头的"时间(GMT)",以及列表末尾的任何"无"或"无传感器",但如果我的ArrayList具有"无"或"无传感器" "在任何地方的中间,他们都没有被删除.我不能为我的生活找出原因.有什么想法吗?谢谢!

tig*_*chi 8

当你在位置i删除一个列表项时,以前在i + 1的项目将被移动到i(一切都向i移动1个单元格).

但是,在你的下一个for循环迭代中,我变成i + 1,所以基本上你正在跳过那个先前在你的删除操作上从i + 1移动到i的项目.在删除项目时需要减少i.

  • 关于比赛用iterator和[Iterator.remove()](http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html#remove%28%29)可能是最简单的. (2认同)