關於List的remove()方法


自定義一個ArrayList然后把符合條件的元素刪除。

第一種方法:順序循環,減一操作,把符合條件的元素刪除;如果不進行減一操作,當list把符合條件的元素刪除后,后面符合的元素可能不會刪除,導致程序出錯。

import java.util.ArrayList;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Tom");
        list.add("Tom");
        list.add("David");
        list.add("Lily");
        list.add("Lucy");
        list.add("James");
        for (int i = 0; i < list.size(); i++) {
            if ("Tom".equals(list.get(i))) {
                list.remove(i);
                // 減一操作
                i--;
            }
        }
        System.out.println(list.toString());
    }
}

結果如下:

錯誤代碼:

import java.util.ArrayList;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Tom");
        list.add("Tom");
        list.add("David");
        list.add("Lily");
        list.add("Lucy");
        list.add("James");
        for (int i = 0; i < list.size(); i++) {
            if ("Tom".equals(list.get(i))) {
                list.remove(i);
            }
        }
        System.out.println(list.toString());
    }
}
View Code

結果如下:

 為什么會出現這種情況呢?原來List每remove掉一個元素以后,后面的元素都會向前移動,此時如果執行i=i+1,則剛剛移過來的元素沒有被讀取。

 第二種方法:倒序循環,把符合條件的元素直接刪除。

import java.util.ArrayList;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Tom");
        list.add("Tom");
        list.add("David");
        list.add("Lily");
        list.add("Lucy");
        list.add("James");
        for (int i = list.size() - 1; i >= 0; i--) {
            if ("Tom".equals(list.get(i))) {
                list.remove(i);
            }
        }
        System.out.println(list.toString());
    }
}

結果如下:

  第三種方法:使用迭代器,把符合條件的元素刪除。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("Tom");
        list.add("Tom");
        list.add("David");
        list.add("Lily");
        list.add("Lucy");
        list.add("James");
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            if ("Tom".equals(it.next())) {
                it.remove();
            }
        }
        System.out.println(list.toString());
    }
}

結果如下:

 推薦使用第三種方法進行remove操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM