📅  最后修改于: 2023-12-03 15:01:52.370000             🧑  作者: Mango
CopyOnWriteArrayList 是 Java 中线程安全的数组实现类,可以支持并发读写,其内部采用了写时复制(Copy-On-Write)的机制,即在写操作时,先将原来的数组复制一份,然后进行写操作,最后将新数组赋值回原来的数组。
CopyOnWriteArrayList 的 forEach() 方法可以直接遍历整个列表,并对每个元素执行指定的操作。与传统的 ArrayList 直接遍历不同,CopyOnWriteArrayList 增加了对并发修改的支持,能够保证遍历时不会受到其他线程的修改影响。
CopyOnWriteArrayList 的 forEach() 方法语法如下:
void forEach(Consumer<? super E> action)
其中,action 参数表示要执行的操作,该参数为 Consumer 类型,如果要执行多个操作,可以使用 andThen() 方法将多个 Consumer 类型的操作合并为一个,例如:
Consumer<E> action1 = e -> System.out.println(e);
Consumer<E> action2 = e -> System.out.println(e.getClass().getName());
action1.andThen(action2).accept(e);
下面是一个示例程序,演示了如何使用 CopyOnWriteArrayList 的 forEach() 方法遍历数组,并对每个元素执行指定的操作:
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayListDemo {
public static void main(String[] args) {
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
list.add("Java");
list.add("Python");
list.add("Ruby");
list.add("PHP");
// 使用 forEach() 方法遍历数组
list.forEach(e -> System.out.println(e));
// 使用 andThen() 方法执行多个操作
list.forEach(e -> System.out.println(e.toUpperCase()));
}
}
运行结果如下:
Java
Python
Ruby
PHP
JAVA
PYTHON
RUBY
PHP
这段程序首先创建了一个 CopyOnWriteArrayList 实例,然后向列表中添加了四个字符串。接着,程序调用了列表的 forEach() 方法,并使用 Lambda 表达式将待执行的操作传递给了该方法,这里输出了列表中的每个元素。
接下来,程序使用 andThen() 方法将两个 Consumer 类型的操作合并为一个,该操作将每个元素转换为大写字母并输出。最后,程序运行结果输出了列表中的每个元素,并将每个元素转换为大写字母并输出。