搜索
您的当前位置:首页正文

Java - List集合中如何删除多个元素? remove( )方法 ?

来源:易榕旅网

List集合中的remove方法

  • remove(int index) :移除此列表中指定位置上的元素。

Iteractor的remove方法

  • remove(): 从迭代器指向的 collection 中移除迭代器返回的最后一个元素.

 

1.使用普通for循环.

/*
    删除ArrayList集合中的 "bbb" 元素.
*/
public class list {
    public static void main(String[] args) {
        // 定义ArrayList集合,并存入多个字符串。
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("bbb");
        list.add("ccc");
        list.add("bbb");
        list.add("bbb");
        list.add("aaa");
        System.out.println("删除之前:"+list);

        // 使用普通for循环遍历 , 删除元素 bbb
        for (int i = 0; i < list.size(); i++) {
            // 判断集合中元素是否和bbb相等.
            if("bbb".equals(list.get(i))){
                list.remove(i);
                i--;   // 重点 - 一定要注意写!
            }
        }
        System.out.println("删除之后:"+list);
    }
}

删除之前:[aaa, bbb, bbb, ccc, bbb, bbb, aaa]
删除之后:[aaa, bbb, ccc, bbb, aaa]  <--   没有i--的情况下: 
删除之后:[aaa, ccc, aaa]            <--   有i--的情况下: 

为什么要写i- - ?

2.使用倒叙循环.

for (int i = list.size() - 1; i >= 0; i--) {
     if("bbb".equals(list.get(i))){
          list.remove(i);
     }
}

删除之前:[aaa, bbb, bbb, ccc, bbb, bbb, aaa]
删除之后:[aaa, ccc, aaa]      <--   不用写i-- , 就可以删除.

3.使用迭代器.

// 获取集合对应的迭代器,用来遍历集合中的元素的。
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
    String next = iterator.next();
    if("bbb".equals(next)){
        // 注意: 不能用list的remove方法.
        // list.remove(next);

        // 使用迭代器中的remove()方法,可以删除元素.
        iterator.remove();
    }
}

注意:

如果使用list.remove()方法就会报ConcurrentModifiedException(并发修改异常):


什么情况下会出现并发修改异常 ?

在使用迭代器遍历集合的过程中 , 修改了集合的长度(添加/删除元素) !
 
注意:
       使用迭代器/增强for对 Collection集合或者数组 只能进行遍历 ,
       不能修改或删除元素 , 否则就会报并发修改异常.

扩展知识点:

Iterator接口中有一个子接口ListIterator(只有list接口下的集合可以使用)

ListIterator接口中方法: 
      add(): 添加元素
      remove(): 删除元素. 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top