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()