広告

Java : CopyOnWriteArrayList (並列処理用リスト) - API使用例

CopyOnWriteArrayList (Java SE 19 & JDK 19) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

基になる配列の新しいコピーを作成することにより、すべての推移的操作(add、setなど)が実装されるArrayListのスレッドセーフな変数です。

クラス構成

CopyOnWriteArrayList クラスは、反復処理 (例えば for-eachループ文) 中に addset などによる変更を許容する List の実装です。
非チェック例外の ConcurrentModificationException が発生しないことが保証されています。

void test(List<Integer> list) throws InterruptedException {
    for (int i = 0; i < 5; i++) {
        list.add(i);
    }

    try (final var executor = Executors.newSingleThreadScheduledExecutor()) {

        executor.schedule(() -> {
            System.out.println("-- add value! --");
            list.add(9999);
        }, 5, TimeUnit.SECONDS);

        try {
            for (final var value : list) {
                System.out.println("value = " + value);
                TimeUnit.SECONDS.sleep(2);
            }
        } catch (ConcurrentModificationException e) {
            System.out.println("ConcurrentModificationException!");
        }
    }

    System.out.println("-- end --");
    System.out.println("list = " + list);
}
test(new ArrayList<>());

// 結果
// ↓
//value = 0
//value = 1
//value = 2
//-- add value! --
//ConcurrentModificationException!
//-- end --
//list = [0, 1, 2, 3, 4, 9999]

test(new CopyOnWriteArrayList<>());

// 結果
// ↓
//value = 0
//value = 1
//value = 2
//-- add value! --
//value = 3
//value = 4
//-- end --
//list = [0, 1, 2, 3, 4, 9999]

コンストラクタ

CopyOnWriteArrayList ()

空のリストを作成します。

final var list = new CopyOnWriteArrayList<String>();
System.out.println(list); // []

list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println(list); // [aaa, bbb, ccc]

CopyOnWriteArrayList (E[] toCopyIn)

指定された配列のコピーを保持するリストを作成します。

final String[] toCopyIn = {"aaa", "bbb", "ccc"};
System.out.println(Arrays.toString(toCopyIn)); // [aaa, bbb, ccc]

final var list = new CopyOnWriteArrayList<>(toCopyIn);
System.out.println(list); // [aaa, bbb, ccc]

CopyOnWriteArrayList (Collection<? extends E> c)

指定されたコレクションの要素が含まれているリストを、要素がコレクションのイテレータによって返される順序で作成します。

final var c = List.of("aaa", "bbb", "ccc");
System.out.println(c); // [aaa, bbb, ccc]

final var list = new CopyOnWriteArrayList<>(c);
System.out.println(list); // [aaa, bbb, ccc]

メソッド

void add (int index, E element)

このリスト内の指定された位置に指定された要素を挿入します。

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    list.add(0, "A");
    System.out.println(list); // [A, a, b, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    list.add(1, "B");
    System.out.println(list); // [a, B, b, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    list.add(2, "C");
    System.out.println(list); // [a, b, C, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    list.add(3, "D");
    System.out.println(list); // [a, b, c, D]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    //list.add(4, "D"); // IndexOutOfBoundsException
}

boolean add (E e)

このリストの最後に、指定された要素を追加します。

final var list = new CopyOnWriteArrayList<String>();
System.out.println(list); // []

System.out.println(list.add("a")); // true
System.out.println(list); // [a]

System.out.println(list.add("b")); // true
System.out.println(list); // [a, b]

System.out.println(list.add("c")); // true
System.out.println(list); // [a, b, c]

boolean addAll (int index, Collection<? extends E> c)

指定されたコレクション内のすべての要素を、このリストの指定された位置に挿入します。

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.addAll(0, List.of("A1", "A2"))); // true
    System.out.println(list); // [A1, A2, a, b, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.addAll(1, List.of("B1", "B2", "B3"))); // true
    System.out.println(list); // [a, B1, B2, B3, b, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.addAll(2, List.of("C1", "C2", "C3", "C4"))); // true
    System.out.println(list); // [a, b, C1, C2, C3, C4, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.addAll(3, List.of())); // false
    System.out.println(list); // [a, b, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    //list.addAll(4, List.of("E")); // IndexOutOfBoundsException
}
final var src = List.of("a", "b", "c");
System.out.println(src);// [a, b, c]

final var list = new CopyOnWriteArrayList<>(src);

// Setは順序が保証されません。
System.out.println(list.addAll(3, Set.of("D1", "D2", "D3"))); // true
System.out.println(list); // [a, b, c, D3, D2, D1]

boolean addAll (Collection<? extends E> c)

指定されたコレクション内のすべての要素を、指定されたコレクションのイテレータによって返される順序でこのリストの最後に追加します。

final var list = new CopyOnWriteArrayList<String>();

System.out.println(list.addAll(List.of("a1"))); // true
System.out.println(list); // [a1]

System.out.println(list.addAll(List.of("b1", "b2"))); // true
System.out.println(list); // [a1, b1, b2]

System.out.println(list.addAll(List.of("c1", "c2", "c3"))); // true
System.out.println(list); // [a1, b1, b2, c1, c2, c3]

System.out.println(list.addAll(List.of())); // false
System.out.println(list); // [a1, b1, b2, c1, c2, c3]
final var list = new CopyOnWriteArrayList<String>();
System.out.println(list); // []

// Setは順序が保証されません。
System.out.println(list.addAll(Set.of("c1", "c2", "c3"))); // true
System.out.println(list); // [c3, c2, c1]

int addAllAbsent (Collection<? extends E> c)

このリストに含まれていない、指定されたコレクション内のすべての要素を、指定されたコレクションのイテレータによって返される順序でこのリストの最後に追加します。

final var list = new CopyOnWriteArrayList<>();
System.out.println(list); // []

final var ret1 = list.addAllAbsent(List.of("aaa"));
System.out.println(ret1); // 1
System.out.println(list); // [aaa]

final var ret2 = list.addAllAbsent(List.of("bbb", "ccc"));
System.out.println(ret2); // 2
System.out.println(list); // [aaa, bbb, ccc]

final var ret3 = list.addAllAbsent(List.of("aaa", "bbb"));
System.out.println(ret3); // 0
System.out.println(list); // [aaa, bbb, ccc]

final var ret4 = list.addAllAbsent(List.of("ccc", "XXX"));
System.out.println(ret4); // 1
System.out.println(list); // [aaa, bbb, ccc, XXX]

boolean addIfAbsent (E e)

要素が存在しない場合、要素を追加します。

final var list = new CopyOnWriteArrayList<>();
System.out.println(list); // []

final var ret1 = list.addIfAbsent("aaa");
System.out.println(ret1); // true
System.out.println(list); // [aaa]

final var ret2 = list.addIfAbsent("XXX");
System.out.println(ret2); // true
System.out.println(list); // [aaa, XXX]

final var ret3 = list.addIfAbsent("aaa");
System.out.println(ret3); // false
System.out.println(list); // [aaa, XXX]

final var ret4 = list.addIfAbsent("YYY");
System.out.println(ret4); // true
System.out.println(list); // [aaa, XXX, YYY]

void clear ()

このリストからすべての要素を削除します。

final var list = new CopyOnWriteArrayList<String>();
list.add("a");
list.add("b");
list.add("c");

System.out.println(list); // [a, b, c]

list.clear();
System.out.println(list); // []

Object clone ()

このリストのシャロー・コピーを返します。

final var list = new CopyOnWriteArrayList<String>();
list.add("a");
list.add("b");
list.add("c");

System.out.println(list); // [a, b, c]

final var cloned = list.clone();
System.out.println(cloned); // [a, b, c]
System.out.println(cloned.getClass()); // class java.util.concurrent.CopyOnWriteArrayList

boolean contains (Object o)

指定の要素がこのリストに含まれている場合にtrueを返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

System.out.println(list.contains("")); // false
System.out.println(list.contains("a")); // true
System.out.println(list.contains("b")); // true
System.out.println(list.contains("c")); // true

System.out.println(list.contains("abc")); // false

boolean containsAll (Collection<?> c)

指定されたコレクションのすべての要素がこのリストに含まれている場合にtrueを返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

System.out.println(list.containsAll(List.of())); // true

System.out.println(list.containsAll(List.of("a"))); // true
System.out.println(list.containsAll(List.of("a", "b"))); // true
System.out.println(list.containsAll(List.of("b", "a"))); // true
System.out.println(list.containsAll(List.of("c", "b", "a"))); // true

System.out.println(list.containsAll(List.of("d"))); // false
System.out.println(list.containsAll(List.of("a", "d"))); // false
System.out.println(list.containsAll(List.of("a", "b", "c", "d"))); // false

boolean equals (Object o)

指定されたオブジェクトがこのリストと等しいかどうかを比較します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

System.out.println(list.equals(List.of("a"))); // false
System.out.println(list.equals(List.of("a", "b"))); // false
System.out.println(list.equals(List.of("a", "b", "c"))); // true
System.out.println(list.equals(List.of("c", "b", "a"))); // false
final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

final var arrayList = new ArrayList<>(list);
System.out.println(arrayList); // [a, b, c]
System.out.println(list.equals(arrayList)); // true

final var linkedList = new LinkedList<>(list);
System.out.println(linkedList); // [a, b, c]
System.out.println(list.equals(linkedList)); // true
final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

final var set = new LinkedHashSet<>();
set.add("a");
set.add("b");
set.add("c");

System.out.println(set); // [a, b, c]
System.out.println(list.equals(set)); // false

void forEach (Consumer<? super E> action)

Iterableの各要素に対して指定されたアクションを、すべての要素が処理されるか、アクションが例外をスローするまで実行します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]

System.out.println("-- forEach --");
list.forEach(element -> {
    System.out.println(element);
});

// 結果
// ↓
//-- forEach --
//aaa
//bbb
//ccc

E get (int index)

このリスト内の指定された位置にある要素を返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

//list.get(-1); // IndexOutOfBoundsException
System.out.println(list.get(0)); // a
System.out.println(list.get(1)); // b
System.out.println(list.get(2)); // c
//list.get(3); // IndexOutOfBoundsException
final var list = new CopyOnWriteArrayList<Integer>();
Collections.addAll(list, 10, 20, 30, 40);
System.out.println(list); // [10, 20, 30, 40]

System.out.println(list.get(0)); // 10
System.out.println(list.get(1)); // 20
System.out.println(list.get(2)); // 30
System.out.println(list.get(3)); // 40

int hashCode ()

このリストのハッシュ・コード値を返します。

final var list1 = new CopyOnWriteArrayList<String>();
Collections.addAll(list1, "a", "b", "c");
System.out.println(list1.hashCode()); // 126145

final var list2 = new CopyOnWriteArrayList<String>();
Collections.addAll(list2, "A", "B", "C");
System.out.println(list2.hashCode()); // 94369

final var list3 = new CopyOnWriteArrayList<Integer>();
Collections.addAll(list3, 1, 2, 3);
System.out.println(list3.hashCode()); // 30817

int indexOf (E e, int index)

指定された要素をリスト内でindexから検索して最初に検出された位置のインデックスを返します。要素が見つからない場合は -1を返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c", "a", "b", "c");
System.out.println(list); // [a, b, c, a, b, c]

System.out.println(list.indexOf("a", 0)); // 0
System.out.println(list.indexOf("a", 1)); // 3
System.out.println(list.indexOf("a", 2)); // 3
System.out.println(list.indexOf("a", 3)); // 3
System.out.println(list.indexOf("a", 4)); // -1
System.out.println(list.indexOf("a", 5)); // -1

System.out.println(list.indexOf("b", 0)); // 1
System.out.println(list.indexOf("b", 1)); // 1
System.out.println(list.indexOf("b", 2)); // 4
System.out.println(list.indexOf("b", 3)); // 4
System.out.println(list.indexOf("b", 4)); // 4
System.out.println(list.indexOf("b", 5)); // -1

System.out.println(list.indexOf("c", 0)); // 2
System.out.println(list.indexOf("c", 1)); // 2
System.out.println(list.indexOf("c", 2)); // 2
System.out.println(list.indexOf("c", 3)); // 5
System.out.println(list.indexOf("c", 4)); // 5
System.out.println(list.indexOf("c", 5)); // 5

System.out.println(list.indexOf("d", 0)); // -1

int indexOf (Object o)

指定された要素がこのリスト内で最初に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c", "a", "b", "c");
System.out.println(list); // [a, b, c, a, b, c]

System.out.println(list.indexOf("")); // -1
System.out.println(list.indexOf("a")); // 0
System.out.println(list.indexOf("b")); // 1
System.out.println(list.indexOf("c")); // 2
System.out.println(list.indexOf("d")); // -1
System.out.println(list.indexOf("abc")); // -1

boolean isEmpty ()

このリストに要素がない場合にtrueを返します。

final var list = new CopyOnWriteArrayList<String>();
list.add("a");
list.add("b");
list.add("c");

System.out.println(list); // [a, b, c]
System.out.println(list.isEmpty()); // false

list.clear();
System.out.println(list); // []
System.out.println(list.isEmpty()); // true

Iterator<E> iterator ()

このリスト内の要素を適切な順序で反復するイテレータを返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]

final var iterator = list.iterator();
iterator.forEachRemaining(System.out::println);

// 結果
// ↓
//aaa
//bbb
//ccc

int lastIndexOf (E e, int index)

指定された要素をリスト内でindexから後向きに検索して最後に検出された位置のインデックスを返します。要素が見つからない場合は -1を返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c", "a", "b", "c");
System.out.println(list); // [a, b, c, a, b, c]

System.out.println(list.lastIndexOf("a", 0)); // 0
System.out.println(list.lastIndexOf("a", 1)); // 0
System.out.println(list.lastIndexOf("a", 2)); // 0
System.out.println(list.lastIndexOf("a", 3)); // 3
System.out.println(list.lastIndexOf("a", 4)); // 3
System.out.println(list.lastIndexOf("a", 5)); // 3

System.out.println(list.lastIndexOf("b", 0)); // -1
System.out.println(list.lastIndexOf("b", 1)); // 1
System.out.println(list.lastIndexOf("b", 2)); // 1
System.out.println(list.lastIndexOf("b", 3)); // 1
System.out.println(list.lastIndexOf("b", 4)); // 4
System.out.println(list.lastIndexOf("b", 5)); // 4

System.out.println(list.lastIndexOf("c", 0)); // -1
System.out.println(list.lastIndexOf("c", 1)); // -1
System.out.println(list.lastIndexOf("c", 2)); // 2
System.out.println(list.lastIndexOf("c", 3)); // 2
System.out.println(list.lastIndexOf("c", 4)); // 2
System.out.println(list.lastIndexOf("c", 5)); // 5

System.out.println(list.lastIndexOf("d", 5)); // -1

int lastIndexOf (Object o)

指定された要素がこのリスト内で最後に検出された位置のインデックスを返します。指定された要素がこのリストにない場合は -1を返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c", "a", "b", "c");
System.out.println(list); // [a, b, c, a, b, c]

System.out.println(list.lastIndexOf("")); // -1
System.out.println(list.lastIndexOf("a")); // 3
System.out.println(list.lastIndexOf("b")); // 4
System.out.println(list.lastIndexOf("c")); // 5
System.out.println(list.lastIndexOf("d")); // -1
System.out.println(list.lastIndexOf("abc")); // -1

ListIterator<E> listIterator ()

このリスト内の要素を適切な順序で反復するリスト・イテレータを返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]

final var listIterator = list.listIterator();
listIterator.forEachRemaining(System.out::println);

// 結果
// ↓
//aaa
//bbb
//ccc

ListIterator<E> listIterator (int index)

リスト内の指定された位置で始まる、リスト内の要素を適切な順序で反復するリスト・イテレータを返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]

{
    final var ret = list.listIterator(0);
    ret.forEachRemaining(System.out::println);

    // 結果
    // ↓
    //aaa
    //bbb
    //ccc
}
{
    final var ret = list.listIterator(1);
    ret.forEachRemaining(System.out::println);

    // 結果
    // ↓
    //bbb
    //ccc
}
{
    final var ret = list.listIterator(2);
    ret.forEachRemaining(System.out::println);

    // 結果
    // ↓
    //ccc
}

E remove (int index)

このリストの指定された位置にある要素を削除します。

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.remove(0)); // a
    System.out.println(list); // [b, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.remove(1)); // b
    System.out.println(list); // [a, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.remove(2)); // c
    System.out.println(list); // [a, b]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    //list.remove(3); // IndexOutOfBoundsException
}

boolean remove (Object o)

指定された要素がこのリストにあれば、その最初のものをリストから削除します。

final var src = List.of("a", "b", "a", "b", "A", "B");
System.out.println(src); // [a, b, a, b, A, B]

{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.remove("")); // false
    System.out.println(list); // [a, b, a, b, A, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.remove("a")); // true
    System.out.println(list); // [b, a, b, A, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.remove("b")); // true
    System.out.println(list); // [a, a, b, A, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.remove("A")); // true
    System.out.println(list); // [a, b, a, b, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.remove("B")); // true
    System.out.println(list); // [a, b, a, b, A]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.remove("C")); // false
    System.out.println(list); // [a, b, a, b, A, B]
}

boolean removeAll (Collection<?> c)

リストから、指定されたコレクション内に保持されているすべての要素を削除します。

final var src = List.of("a", "b", "a", "b", "A", "B");
System.out.println(src); // [a, b, a, b, A, B]

{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.removeAll(List.of())); // false
    System.out.println(list); // [a, b, a, b, A, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.removeAll(List.of("a"))); // true
    System.out.println(list); // [b, b, A, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.removeAll(List.of("a", "b"))); // true
    System.out.println(list); // [A, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.removeAll(List.of("b", "a"))); // true
    System.out.println(list); // [A, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.removeAll(List.of("A"))); // true
    System.out.println(list); // [a, b, a, b, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.removeAll(List.of("X", "Y", "Z"))); // false
    System.out.println(list); // [a, b, a, b, A, B]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.removeAll(List.of("A", "X", "Y", "Z"))); // true
    System.out.println(list); // [a, b, a, b, B]
}

boolean removeIf (Predicate<? super E> filter)

指定された述語を満たすこのコレクションの要素をすべて削除します。

final var list = new CopyOnWriteArrayList<String>();
list.add("aaa");
list.add("BBB");
list.add("ccc");
list.add("DDD");

System.out.println(list); // [aaa, BBB, ccc, DDD]

final var ret = list.removeIf(s -> {
    // 大文字であるかチェックします。
    return s.equals(s.toUpperCase());
});

System.out.println(ret); // true
System.out.println(list); // [aaa, ccc]
final var list = new CopyOnWriteArrayList<String>();
list.add("aaa");
list.add("bbb");

System.out.println(list); // [aaa, bbb]

final var ret = list.removeIf(s -> s.equals(s.toUpperCase()));

System.out.println(ret); // false
System.out.println(list); // [aaa, bbb]

boolean retainAll (Collection<?> c)

指定されたコレクション内に保持されている、リスト内の要素だけを保持します。

final var src = List.of("a", "b", "a", "b", "A", "B");
System.out.println(src); // [a, b, a, b, A, B]

{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.retainAll(List.of())); // true
    System.out.println(list); // []
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.retainAll(List.of("a", "b"))); // true
    System.out.println(list); // [a, b, a, b]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.retainAll(List.of("b", "a"))); // true
    System.out.println(list); // [a, b, a, b]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.retainAll(List.of("A"))); // true
    System.out.println(list); // [A]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.retainAll(List.of("X", "Y", "Z"))); // true
    System.out.println(list); // []
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.retainAll(List.of("A", "X", "Y", "Z"))); // true
    System.out.println(list); // [A]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, a, b, A, B]

    System.out.println(list.retainAll(List.of("a", "b", "A", "B"))); // false
    System.out.println(list); // [a, b, a, b, A, B]
}

E set (int index, E element)

このリストの指定された位置にある要素を、指定された要素で置き換えます。

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.set(0, "A")); // a
    System.out.println(list); // [A, b, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.set(1, "B")); // b
    System.out.println(list); // [a, B, c]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.set(2, "C")); // c
    System.out.println(list); // [a, b, C]
}
{
    final var list = new CopyOnWriteArrayList<>(src);
    System.out.println(list); // [a, b, c]

    //list.set(3, "D"); // IndexOutOfBoundsException
}

int size ()

このリスト内にある要素の数を返します。

final var list = new CopyOnWriteArrayList<String>();
System.out.println(list); // []
System.out.println(list.size()); // 0

list.add("a");

System.out.println(list); // [a]
System.out.println(list.size()); // 1

list.add("b");
list.add("c");
list.add("d");

System.out.println(list); // [a, b, c, d]
System.out.println(list.size()); // 4

Spliterator<E> spliterator ()

このリスト内の要素に対するSpliteratorを返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]

final var spliterator = list.spliterator();
spliterator.forEachRemaining(System.out::println);

// 結果
// ↓
//aaa
//bbb
//ccc

List<E> subList (int fromIndex, int toIndex)

このリストの、fromIndex (これを含む)とtoIndex (これを含まない)の間の部分のビューを返します。

final var list = new CopyOnWriteArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");

System.out.println(list); // [a, b, c, d]

System.out.println(list.subList(0, 0)); // []
System.out.println(list.subList(0, 1)); // [a]
System.out.println(list.subList(0, 2)); // [a, b]
System.out.println(list.subList(0, 3)); // [a, b, c]
System.out.println(list.subList(0, 4)); // [a, b, c, d]
//list.subList(0, 5); // IndexOutOfBoundsException

// サブリストの変更は、本体のリストにも反映されます。
final var subList = list.subList(1, 3);
System.out.println(subList); // [b, c]
System.out.println(list); // [a, b, c, d]

subList.set(0, "X");
System.out.println(subList); // [X, c]
System.out.println(list); // [a, X, c, d]

subList.add("Y");
System.out.println(subList); // [X, c, Y]
System.out.println(list); // [a, X, c, Y, d]

subList.remove("c");
System.out.println(subList); // [X, Y]
System.out.println(list); // [a, X, Y, d]

Object[] toArray ()

このリスト内のすべての要素を適切な順序で(最初の要素から最後の要素へ)含んでいる配列を返します。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

final Object[] array = list.toArray();
System.out.println(Arrays.toString(array)); // [a, b, c]

<T> T[] toArray (T[] a)

このリスト内のすべての要素を適切な順序で(最初の要素から最後の要素へ)含んでいる配列を返します。返される配列の実行時の型は、指定された配列の型になります。

final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

final String[] array = list.toArray(new String[0]);
System.out.println(Arrays.toString(array)); // [a, b, c]
final var list = new CopyOnWriteArrayList<String>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

{
    final String[] array = new String[3];
    System.out.println(Arrays.toString(array)); // [null, null, null]

    final var ret = list.toArray(array);
    System.out.println(Arrays.toString(array)); // [a, b, c]
    System.out.println(Arrays.toString(ret)); // [a, b, c]
}
{
    final String[] array = new String[5];
    System.out.println(Arrays.toString(array)); // [null, null, null, null, null]

    final var ret = list.toArray(array);
    System.out.println(Arrays.toString(array)); // [a, b, c, null, null]
    System.out.println(Arrays.toString(ret)); // [a, b, c, null, null]
}
{
    final String[] array = new String[1];
    System.out.println(Arrays.toString(array)); // [null]

    final var ret = list.toArray(array);
    System.out.println(Arrays.toString(array)); // [null]
    System.out.println(Arrays.toString(ret)); // [a, b, c]
}

String toString ()

このリストの文字列表現を返します。

final var list = new CopyOnWriteArrayList<String>();

final var str1 = list.toString();
System.out.println(str1); // []

list.add("aaa");

final var str2 = list.toString();
System.out.println(str2); // [aaa]

list.add("bbb");

final var str3 = list.toString();
System.out.println(str3); // [aaa, bbb]

list.add("ccc");

final var str4 = list.toString();
System.out.println(str4); // [aaa, bbb, ccc]

Collectionで宣言されたメソッド

parallelStream, stream, toArray

Java API 使用例 : Collection」をご参照ください。

Listで宣言されたメソッド

replaceAll, sort

Java API 使用例 : List」をご参照ください。


関連記事

ページの先頭へ