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- - ?

当删除bbb元素后,下一个元素就会向前移一位 , 而索引继续往后加!
所以删除之后 , 用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(): 删除元素. 
### 回答1: 可以使用Listremove(Object o)方法删除指定元素。例如,如果要删除List值为"apple"的元素,可以使用以下代码: List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("orange"); list.remove("apple"); 执行完上述代码后,List就只剩下"banana"和"orange"两个元素了。需要注意的是,如果List有多个值为"apple"的元素,remove方法只会删除第一个匹配的元素。如果需要删除所有匹配的元素,可以使用循环遍历List并调用remove方法。 ### 回答2: JavaList是一个可以包含任意数据类型的序列容器,它允许我们在序列添加、删除、查找和获取元素等操作。在操作List时,我们有时需要删除指定索引位置的元素,也有时需要删除指定内容的元素。 删除指定索引位置的元素可以使用Listremove方法,该方法接受一个整数参数index,表示要删除的元素的索引值。例如,要删除List编号为2的元素,则可以使用如下代码: ``` List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.remove(2); // 删除编号为2的元素 ``` 删除指定内容的元素可以使用Listremove方法结合equals方法,该方法接受一个参数,表示要删除的元素内容。例如,要删除List内容为"C"的元素,则可以使用如下代码: ``` List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.remove("C"); // 删除内容为"C"的元素 ``` 需要注意的是,对于LinkedList这样的链表容器,删除操作稍有不同。因为LinkedList是通过指针链接元素的,所以删除个元素需要重新指定其前后元素的链接关系。例如,要删除LinkedList编号为2的元素,则可以使用如下代码: ``` LinkedList<String> list = new LinkedList<String>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.remove(2); // 删除编号为2的元素 ``` 需要注意的是,对于删除操作,如果要删除的元素不存在,Listremove方法不会报错,而是会返回false。因此,在进行删除操作时,我们需要先判断元素是否存在,避免因删除不存在的元素而导致错误。 总之,在Java,我们有多种方法可以删除List指定元素,我们可以根据具体需要选择合适的方式实现。 ### 回答3: 在java-05集合-list,如果我们需要删除指定的元素,有几种方法可以实现。 方法一:使用remove方法 List列表提供了remove方法,可以通过指定元素的值来删除元素。 remove方法的语法如下所示: list.remove(Object obj) 可以看到,remove方法需要传入一个参数,也就是需要删除的元素。方法执行后,列表与该元素值相等的元素将被删除。 比如,在以下代码List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.remove("b"); 执行完remove方法之后,list的元素序列为"a","c"。 需要注意的是,如果该列表存在多个相等的元素,remove方法仅会删除第一个匹配的元素,其他相等的元素不会被删除方法二:使用Iterator迭代器遍历删除 除了使用remove方法删除元素外,我们还可以使用迭代器Iterator对象的remove方法实现删除指定元素的目的。可以看到,在迭代器调用remove方法时,会将指针指向的元素移除并且跳过下一个元素。 比如,在以下代码List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if(item.equals("b")) { iterator.remove(); } } 执行完上述代码之后,list的元素序列为"a","c"。 需要注意的是,在使用迭代器遍历的时候,如果直接调用listremove方法,是会报ConcurrentModificationException异常的。因为调用listremove方法是会改变集合大小的,所以需要使用迭代器的remove方法来执行元素的删除操作。 以上两种方法都可以实现删除List列表指定的元素,需要根据具体的业务场景进行选择,使用合适的方法能够更为高效完成任务。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值