📌  相关文章
📜  Java中的 CopyOnWriteArrayList subList() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:16:22.250000             🧑  作者: Mango

Java中的 CopyOnWriteArrayList subList() 方法及示例

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 是一个不错的选择。