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--){
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();
}
留言
張貼留言