Java : AbstractCollection - API使用例

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


概要

このクラスは、Collectionインタフェースのスケルトン実装を提供し、このインタフェースを実装するのに必要な作業量を最小限に抑えます。

クラス構成

必要最低限の独自実装をした例です。

class MyCollection extends AbstractCollection<String> {
    private final String[] values;

    MyCollection(String[] values) {
        this.values = Objects.requireNonNull(values);
    }

    @Override
    public Iterator<String> iterator() {
        return new Iterator<>() {
            private int index;

            @Override
            public boolean hasNext() {
                return values.length != index;
            }

            @Override
            public String next() {
                final var value = values[index];
                index++;
                return value;
            }
        };
    }

    @Override
    public int size() {
        return values.length;
    }
}

final var collection = new MyCollection(new String[]{"aaa", "bbb", "ccc"});

System.out.println(collection); // [aaa, bbb, ccc]
System.out.println(collection.size()); // 3
System.out.println(collection.isEmpty()); // false

System.out.println("-- values --");
for (final var value : collection) {
    System.out.println(value);
}

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

コンストラクタ

AbstractCollection ()

唯一のコンストラクタです。

class MyCollection extends AbstractCollection<String> {
    private final String[] values;

    MyCollection(String[] values) {
        this.values = Objects.requireNonNull(values);
    }

    @Override
    public Iterator<String> iterator() {
        return new Iterator<>() {
            private int index;

            @Override
            public boolean hasNext() {
                return values.length != index;
            }

            @Override
            public String next() {
                final var value = values[index];
                index++;
                return value;
            }
        };
    }

    @Override
    public int size() {
        return values.length;
    }
}

final var collection = new MyCollection(new String[]{"aaa", "bbb", "ccc"});

System.out.println(collection); // [aaa, bbb, ccc]
System.out.println(collection.size()); // 3
System.out.println(collection.isEmpty()); // false

System.out.println("-- values --");
for (final var value : collection) {
    System.out.println(value);
}

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

メソッド

boolean add (E e)

指定された要素がこのコレクションに格納されていることを保証します(オプションの操作)。

final AbstractCollection<String> collection = new ArrayList<>();
System.out.println(collection.add("aaa")); // true
System.out.println(collection.add("bbb")); // true
System.out.println(collection.add("bbb")); // true

System.out.println(collection); // [aaa, bbb, bbb]
final AbstractCollection<String> collection = new HashSet<>();
System.out.println(collection.add("aaa")); // true
System.out.println(collection.add("bbb")); // true
System.out.println(collection.add("bbb")); // false

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

boolean addAll (Collection<? extends E> c)

指定されたコレクションのすべての要素をこのコレクションに追加します(オプションの操作)。

final AbstractCollection<String> collection = new ArrayList<>();

final var list1 = List.of("aaa", "bbb");
final var list2 = List.of("bbb", "ccc");
final var list3 = List.of("ccc");

System.out.println(collection.addAll(list1)); // true
System.out.println(collection); // [aaa, bbb]

System.out.println(collection.addAll(list2)); // true
System.out.println(collection); // [aaa, bbb, bbb, ccc]

System.out.println(collection.addAll(list3)); // true
System.out.println(collection); // [aaa, bbb, bbb, ccc, ccc]
final AbstractCollection<String> collection = new HashSet<>();

final var set1 = Set.of("aaa", "bbb");
final var set2 = Set.of("bbb", "ccc");
final var set3 = Set.of("ccc");

System.out.println(collection.addAll(set1)); // true
System.out.println(collection); // [aaa, bbb]

System.out.println(collection.addAll(set2)); // true
System.out.println(collection); // [aaa, ccc, bbb]

System.out.println(collection.addAll(set3)); // false
System.out.println(collection); // [aaa, ccc, bbb]

void clear ()

このコレクションからすべての要素を削除します(オプションの操作)。

final AbstractCollection<String> collection = new ArrayList<>();
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");

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

collection.clear();

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

boolean contains (Object o)

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

final AbstractCollection<String> collection = new ArrayList<>();
Collections.addAll(collection, "aaa", "bbb", "ccc");
System.out.println(collection); // [aaa, bbb, ccc]

System.out.println(collection.contains("aaa")); // true
System.out.println(collection.contains("bbb")); // true
System.out.println(collection.contains("XXX")); // false

boolean containsAll (Collection<?> c)

指定されたコレクションのすべての要素がこのコレクション内にある場合はtrueを返します。

final AbstractCollection<String> collection = new ArrayList<>();
Collections.addAll(collection, "aaa", "bbb", "ccc");
System.out.println(collection); // [aaa, bbb, ccc]

final var list1 = List.of("aaa", "bbb");
System.out.println(collection.containsAll(list1)); // true

final var list2 = List.of("bbb", "XXX");
System.out.println(collection.containsAll(list2)); // false

final var list3 = List.of("XXX", "YYY");
System.out.println(collection.containsAll(list3)); // false

boolean isEmpty ()

このコレクションに要素がない場合にtrueを返します。

final AbstractCollection<String> collection = new ArrayList<>();

System.out.println(collection); // []
System.out.println(collection.size()); // 0
System.out.println(collection.isEmpty()); // true

collection.add("aaa");
System.out.println(collection); // [aaa]
System.out.println(collection.size()); // 1
System.out.println(collection.isEmpty()); // false

collection.add("bbb");
System.out.println(collection); // [aaa, bbb]
System.out.println(collection.size()); // 2
System.out.println(collection.isEmpty()); // false

abstract Iterator<E> iterator ()

このコレクション中の要素に関係するイテレータを返します。

final AbstractCollection<String> collection = new ArrayList<>();
Collections.addAll(collection, "aaa", "bbb", "ccc");
System.out.println(collection); // [aaa, bbb, ccc]

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

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

boolean remove (Object o)

指定された要素のインスタンスがこのコレクションにあれば、そのインスタンスをコレクションから1つ削除します(オプションの操作)。

final AbstractCollection<String> collection = new ArrayList<>();
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");

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

System.out.println(collection.remove("aaa")); // true
System.out.println(collection); // [bbb, ccc]

System.out.println(collection.remove("bbb")); // true
System.out.println(collection); // [ccc]

System.out.println(collection.remove("XXX")); // false
System.out.println(collection); // [ccc]

boolean removeAll (Collection<?> c)

指定されたコレクションにも格納されているこのコレクションのすべての要素を削除します(オプションの操作)。

final var src = List.of("aaa", "bbb", "ccc");

{
    final AbstractCollection<String> collection = new ArrayList<>(src);
    System.out.println(collection); // [aaa, bbb, ccc]

    final var list = List.of("aaa", "bbb");
    System.out.println(collection.removeAll(list)); // true
    System.out.println(collection); // [ccc]
}
{
    final AbstractCollection<String> collection = new ArrayList<>(src);
    System.out.println(collection); // [aaa, bbb, ccc]

    final var list = List.of("XXX", "YYY");
    System.out.println(collection.removeAll(list)); // false
    System.out.println(collection); // [aaa, bbb, ccc]
}
{
    final AbstractCollection<String> collection = new ArrayList<>(src);
    System.out.println(collection); // [aaa, bbb, ccc]

    final var list = List.of("aaa", "bbb", "ccc", "XXX");
    System.out.println(collection.removeAll(list)); // true
    System.out.println(collection); // []
}

boolean retainAll (Collection<?> c)

このコレクションにおいて、指定されたコレクションに格納されている要素だけを保持します(オプションの操作)。

final var src = List.of("aaa", "bbb", "ccc");

{
    final AbstractCollection<String> collection = new ArrayList<>(src);
    System.out.println(collection); // [aaa, bbb, ccc]

    final var list = List.of("aaa", "bbb");
    System.out.println(collection.retainAll(list)); // true
    System.out.println(collection); // [aaa, bbb]
}
{
    final AbstractCollection<String> collection = new ArrayList<>(src);
    System.out.println(collection); // [aaa, bbb, ccc]

    final var list = List.of("XXX", "YYY");
    System.out.println(collection.retainAll(list)); // true
    System.out.println(collection); // []
}
{
    final AbstractCollection<String> collection = new ArrayList<>(src);
    System.out.println(collection); // [aaa, bbb, ccc]

    final var list = List.of("aaa", "bbb", "ccc", "XXX");
    System.out.println(collection.retainAll(list)); // false
    System.out.println(collection); // [aaa, bbb, ccc]
}

Object[] toArray ()

このコレクションの要素がすべて格納されている配列を返します。

final AbstractCollection<String> collection = new ArrayList<>();
Collections.addAll(collection, "aaa", "bbb", "ccc");
System.out.println(collection); // [aaa, bbb, ccc]

final Object[] ret = collection.toArray();
System.out.println(Arrays.toString(ret)); // [aaa, bbb, ccc]

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

このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。

final AbstractCollection<String> collection = new ArrayList<>();
Collections.addAll(collection, "aaa", "bbb", "ccc");
System.out.println(collection); // [aaa, bbb, ccc]

{
    final String[] ret = collection.toArray(new String[0]);
    System.out.println(Arrays.toString(ret)); // [aaa, bbb, ccc]
}
{
    final String[] array = new String[collection.size()];
    System.out.println(Arrays.toString(array)); // [null, null, null]

    final var ret = collection.toArray(array);
    System.out.println(Arrays.toString(ret)); // [aaa, bbb, ccc]

    System.out.println(Arrays.toString(array)); // [aaa, bbb, ccc]
}

String toString ()

このコレクションの文字列表現を返します。

final AbstractCollection<String> collection = new ArrayList<>();

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

collection.add("aaa");

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

collection.add("bbb");
collection.add("ccc");

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

Collectionで宣言されたメソッド

equals, hashCode, parallelStream, removeIf, size, spliterator, stream, toArray

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

Iterableで宣言されたメソッド

forEach

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


関連記事

ページの先頭へ