循环遍历数组列表以删除指定的元素

时间:2017-11-05 03:36:54

标签: android arraylist

我正在努力学习一段代码,我相信它应该毫无疑问地运作,但情况并非如此。

   public static void clearUnits() {
try{
    for (int i = 1; i <= 3; i++) {

    Log.d("S.G.E", inventoryPriceUnitsList.get(i).toString());
    inventoryPriceUnitsList.remove(i);
    recipePriceUnitList.remove(i);

    }
}catch (Exception e){
  e.printStackTrace();

}

}

此代码的目的是运行包含4个元素的数组列表,并删除第一个元素后面的所有元素。我知道这是非常基本的,我很抱歉浪费你的时间,但我只是需要别人看这个,因为我不明白为什么它会像这样。这段代码的结果应该是一个带有一个元素(元素0)的数组,但是它会留下那个以及第三个元素。我还记录了应该删除的所有元素,并且它正确显示。

1 个答案:

答案 0 :(得分:2)

问题是当你从数组中删除一个元素时,数组会移动。因此,假设在第一轮中删除第一个元素,然后元素1变为元素0,并且2变为1.现在在下一轮中,您将删除新元素1,即原始2,但原始1保留在位置0
简单的解决方案是向后迭代,这样您总是会删除超出您所在点的元素。例如

for (int i = 3; i >= 0; i--) 

会正常工作。