ArrayList刪除特定元素的方法 remove

移除偶數元素
@Test
public void testRemove2(){
    List<Integer> integers = new ArrayList<>(5);
    integers.add(1);
    integers.add(2);
    integers.add(2);
    integers.add(4);
    integers.add(5);

    for (int i = 0; i < integers.size(); i++) {
        if (integers.get(i)%2==0){
            integers.remove(i);
        }
    }

    System.out.println(integers);
}
看起來好像沒問題,加入面試的時候當面問:輸出結果是什么?再問真不會報錯嗎?再問結果是什么?
  • 結果是[1, 2, 5]

原因,因為使用ArrayList的remove()方法之後,此方法會幫忙把
後面的元素自動遞補上去被移除的位置,
而使用迴圈就會跳過檢查遞補上來的元素。遺漏掉了!!!



成功作法在檢查到的時候,補上i--
for(int i=0; i<integers.size(); i++) {
if(!(integers.get(i) %2==0)) {
integers.remove(integers.get(i));
i--;
}
}


把for迴圈倒過來用,從尾端元素開始往前檢查,就不用再補上i--
for(int i=integers.size()-1; i<0;i--){
if(!(integers.get(i) %2==0)) {
integers.remove(integers.get(i))
}


法二 ,使用Iterator來幫忙移除

Iterator itForDs = integers.iterator();
while(itForDs.hasNext()) {
if(itForDs.next() %2==0)
itForDs2.remove();
}




留言

這個網誌中的熱門文章

Use Case Description(描述使用案例)

列出不重複的隨機亂數

子類別建構子super觀念