Collections.emptyList()と新しいリストインスタンス

Collections.emptyList() vs. 新しいリストインスタンス

1. 前書き

この短いチュートリアルでは、Collections.emptyList()と新しいリストインスタンスの違いを説明します。

2. 不変性

java.util.Collections.emptyList()と新しいリストの主な違い(例: new ArrayList<>()は不変性です。

Collections.emptyList()は、変更できないリスト(java.util.Collections.EmptyList)を返します。

新しいリストインスタンスを作成するとき、実装に応じて変更できます。

@Test
public void givenArrayList_whenAddingElement_addsNewElement() {
    List mutableList = new ArrayList<>();
    mutableList.add("test");

    assertEquals(mutableList.size(), 1);
    assertEquals(mutableList.get(0), "test");
}

@Test(expected = UnsupportedOperationException.class)
public void givenCollectionsEmptyList_whenAdding_throwsException() {
    List immutableList = Collections.emptyList();
    immutableList.add("test");
}

3. オブジェクト作成

ソースコードに示されているCollection.emptyList() creates a new empty list instance only once

public static final List EMPTY_LIST = new EmptyList<>();

public static final  List emptyList() {
    return (List) EMPTY_LIST;
}

4. 読みやすさ

空のリストを明示的に作成する場合は、Collections.emptyList()が元の意図をより適切に表現します。 new ArrayList<>()

5. 結論

この記事では、Collections.emptyList()と新しいリストインスタンスの違いに焦点を当てました。

いつものように、完全なソースコードはover on GitHubで利用できます。