📅  最后修改于: 2023-12-03 15:16:22.250000             🧑  作者: Mango
CopyOnWriteArrayList 是 Java 中线程安全的 List 实现类之一,它的特点是在进行写操作时,会复制一份当前集合,并在复制的集合上进行操作,从而实现线程安全。
CopyOnWriteArrayList 的 subList() 方法用于返回一个部分视图,它是原集合的一个子集,支持任意的操作,因为它在内部就是一个新的集合。需要注意的是,由于 subList() 返回的集合是原集合的一个视图,因此操作子集反映在原集合上,反之亦然。subList() 方法的实现基于 CopyOnWriteArrayList 的特点,在返回视图时,会复制一份当前集合,并在视图的集合上进行操作。
下面是 CopyOnWriteArrayList subList() 方法的定义:
public List<E> subList(int fromIndex, int toIndex) {
return new SubList(fromIndex, toIndex);
}
可以看到,subList() 方法返回的是一个 SubList 对象,它是 CopyOnWriteArrayList 的内部类,实现了 List 接口,因此它本身也是一个 List。
下面是 CopyOnWriteArrayList subList() 方法的示例:
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayListSubListExample {
public static void main(String[] args) {
List<Integer> list = new CopyOnWriteArrayList<>();
list.add(1);
list.add(2);
list.add(3);
List<Integer> subList = list.subList(1, 3);
System.out.println(subList); // [2, 3]
subList.add(4);
System.out.println(subList); // [2, 3, 4]
System.out.println(list); // [1, 2, 3, 4]
list.add(5);
System.out.println(subList); // [2, 3, 4]
System.out.println(list); // [1, 2, 3, 4, 5]
subList.remove(0);
System.out.println(subList); // [3, 4]
System.out.println(list); // [1, 3, 4, 5]
}
}
在这个示例中,创建了一个 CopyOnWriteArrayList 对象,并向其中添加了三个元素。然后通过调用 subList() 方法获取了原集合的一个子集,子集由索引位置 1 和 2 所表示的元素组成,即 [2, 3]。接着对子集进行了添加、删除操作,并在相应的步骤中打印了子集和原集合的内容。可以看到,对子集的操作反映在了原集合中,而对原集合的操作也反映在了子集中。
需要注意的是,由于 CopyOnWriteArrayList 的特点是在写操作时复制一份集合,因此在进行写操作时,会比较消耗内存,因此不建议在写操作较为频繁的情况下使用 CopyOnWriteArrayList。而在读操作较为频繁的情况下,CopyOnWriteArrayList 是一个不错的选择。