📅  最后修改于: 2023-12-03 14:42:46.521000             🧑  作者: Mango
Java中的 CopyOnWriteArrayList 是线程安全的 List 实现,它采用了写时复制的策略,在进行修改操作时,会先复制一个新的数组,然后在新数组上进行修改和操作,在操作完毕后再将原数组指向新数组。这种策略虽然会占用更多的空间,但可以保证线程安全,同时避免了修改过程中的并发访问问题。本文将介绍 CopyOnWriteArrayList 的 remove() 方法及示例。
CopyOnWriteArrayList 的 remove() 方法用于删除元素,它有两个重载版本:
public E remove(int index);
public boolean remove(Object o);
CopyOnWriteArrayList 的 remove() 方法会先对数组进行复制操作,然后在复制后的新数组上进行修改和操作,所以它是线程安全的。
下面是 CopyOnWriteArrayList remove() 方法的示例代码:
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayListRemoveExample {
public static void main(String[] args) {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
// 根据索引值删除元素
String removed = list.remove(1);
System.out.println("元素 " + removed + " 已被删除");
System.out.println("删除后的列表:" + list);
// 删除指定元素
boolean success = list.remove("c");
System.out.println("元素 c " + (success ? "已" : "未") + "被删除");
System.out.println("删除后的列表:" + list);
}
}
上述代码首先创建了一个 CopyOnWriteArrayList 实例,并向其添加了 4 个元素。然后分别使用 remove() 方法根据索引值和元素值删除元素,并打印出删除后的列表。
运行上述代码,输出结果如下:
元素 b 已被删除
删除后的列表:[a, c, d]
元素 c 已被删除
删除后的列表:[a, d]
从输出结果可以看出,使用 remove() 方法删除元素时,会先对数组进行复制操作,然后在复制后的新数组上进行修改和操作,保证线程安全。