Почему Collections.ncopies возвращает изменяемую коллекцию? - PullRequest
0 голосов
/ 23 марта 2020

Класс java.util.Collections имеет метод nCopies().
В документации этого метода сказано, что он возвращает неизменную копию коллекции, содержащей n копий того же элемента.

Однако в приведенном ниже коде я могу изменить список и добавить новый элемент в коллекцию. Как это возможно в неизменной коллекции?
(см. Строку № 3 ниже.)

1) List<String> list = new ArrayList<String>(Collections.nCopies(5, "Some string"));

2) System.out.println(list);

3) list.add("Some other string");

4) System.out.println(list);

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Вы не изменяете коллекцию, возвращенную из nCopies - вы создали новый ArrayList и скопировали в него содержимое. Когда копирование завершено, это просто обычный ArrayList, и нет никаких причин, по которым вы не сможете его добавить.

1 голос
/ 23 марта 2020

Поскольку вы создаете новую изменяемую переменную ArrayList из возвращенного списка?

List<String> list = new ArrayList<String>(Collections.nCopies(5, "Chinese Virus"));

это, по сути, то же самое, что и

List<String> unmodifiableList = Collections.nCopies(5, "Chinese Virus");
List<String> modifiableList = new ArrayList<>(unmodifiableList);

unmodifiableList.remove(0); // will throw UnsupportedOperationException
modifiableList.remove(0); // will work without issues

В приведенном выше примере modifiableList is Список, содержащий те же элементы, что и unmodifiableList, но в остальном это просто обычный ArrayList, который позволяет добавлять и удалять элементы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...