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.