Javaの不変ArrayList

Javaの不変のArrayList

1. 概要

このクイックチュートリアルでは、コアJDK、Guava、最後にApache Commons Collections 4でhow to make an ArrayList immutableを示します。

この記事は、例としてここのthe “Java – Back to Basic” seriesの一部です。

参考文献:

Javaストリームを不変のコレクションに収集する

Javaストリームを不変コレクションに収集する方法を学びます。

不変の概要

Immutablesライブラリの迅速で実用的なイントロ-アノテーションを使用して不変オブジェクトを生成するために使用します。

Java –リストからランダムなアイテム/要素を取得

Javaのリストからランダムなアイテムを選択するための迅速かつ実用的なガイド。

2. JDKで

まず、JDKは既存のコレクションから変更不可能なコレクションを取得する優れた方法を提供します。

Collections.unmodifiableList(list);

この時点で、新しいコレクションは変更できなくなります。

@Test(expected = UnsupportedOperationException.class)
public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable() {
    List list = new ArrayList(Arrays.asList("one", "two", "three"));
    List unmodifiableList = Collections.unmodifiableList(list);
    unmodifiableList.add("four");
}

3. グアバと

Guavaは、独自のバージョンのImmutableListを作成するための同様の機能を提供します。

ImmutableList.copyOf(list);

同様に-結果のリストは変更できません:

@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable() {
    List list = new ArrayList(Arrays.asList("one", "two", "three"));
    List unmodifiableList = ImmutableList.copyOf(list);
    unmodifiableList.add("four");
}

この操作は、ビューだけでなく、実際にはcreate a copy of the original listになることに注意してください。

Guavaはビルダーも提供します-これは単にListではなく強い型のImmutableListを返します:

@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable() {
    List list = new ArrayList(Arrays.asList("one", "two", "three"));
    ImmutableList unmodifiableList = ImmutableList.builder().addAll(list).build();
    unmodifiableList.add("four");
}

4. Apache CollectionsCommonsを使用する

最後に、Commons Collectionは、変更不可能なリストを作成するためのAPIも提供します。

ListUtils.unmodifiableList(list);

また、結果のリストを変更すると、UnsupportedOperationExceptionになります。

@Test(expected = UnsupportedOperationException.class)
public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable() {
    List list = new ArrayList(Arrays.asList("one", "two", "three"));
    List unmodifiableList = ListUtils.unmodifiableList(list);
    unmodifiableList.add("four");
}

5. 結論

このチュートリアルでは、コアJDK、Google Guava、またはApache Commons Collectionsのいずれかを使用してcreate an unmodifiable List out of an existing ArrayListを簡単に実行する方法を説明します。

これらすべての例とコードスニペットcan be found over on Githubの実装–これはMavenベースのプロジェクトであるため、そのままインポートして実行するのは簡単です。