Java 循環刪除List元素

我們在使用Java集合的過程中有時需要對List進行刪除有以下幾種錯誤

使用了不可修改的集合無法刪除

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,2,3,4);
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            Integer it = iterator.next();
            if (it!=1){
                iterator.remove();
            }
        }
        System.out.println(list);
    }

在這裏插入圖片描述

Arrays.asList生成的是隻讀的List無論怎麼樣也無法修改其元素

使用for循環刪除

 public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        for (int i = 0; i < list.size(); i++) {
            list.remove(i);
        }
        System.out.println(list);
    }

在這裏插入圖片描述

可以刪除, 但是刪除某個元素之後導致長度的改變會讓整體刪除異常。
這裏本來需要刪除所有元素,卻只是刪除了單數。

正確的使用就是要用迭代器來刪除 或者for循環後再對本索引刪除

Example.1

  public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        for (int i = 0; i < list.size(); i++) {
            list.remove(i);
            i--;
        }
        System.out.println(list);

    }

Example.2

List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            int g = iterator.next();
            if (g!=2){
                iterator.remove();
            }
        }
        System.out.println(list);

但是 List並不是線程安全的,關於List的線程安全可以看下List線程安全

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章