Собирает ли Collections.unmodifiableCollection (list) коллекцию? - PullRequest
8 голосов
/ 29 июля 2011
private List list;

Если мы используем Collections.unmodifiableCollection(list), будет ли это возвращать копию коллекции или это быстрее, чем создание копии?Мы могли бы сделать other.addAll(list), но у нас есть список из 600 000 объектов, поэтому addAll не так хорош.

Вызывающему просто нужна коллекция только для чтения.

Ответы [ 3 ]

11 голосов
/ 29 июля 2011

Collections.unmodifiableList просто возвращает неизменяемую оболочку; он не копирует содержимое списка ввода.

В его Javadoc это достаточно ясно сказано:

Возвращает неизменяемое представление указанного списка. Этот метод позволяет модулям предоставлять пользователям доступ «только для чтения» к внутренним спискам. Операции запроса в возвращаемом списке, «прочитанные» до указанного списка, и попытки изменить возвращенный список, будь то прямой или через его итератор, приводят к UnsupportedOperationException.

Как отметил Мэтт Болл, если вам не нужно, чтобы внутренний List был изменяемым, вы можете просто сохранить Guava ImmutableList внутри ... вы можете смело передавайте это вызывающим абонентам напрямую, поскольку они никогда не изменятся.

8 голосов
/ 29 июля 2011

Копирует ли Collections.unmodifiableCollection(list) коллекцию?

Другие ответы верны (+1 s вокруг): ответ нет.


Вместо Collections.unmodifiableList() вы можете использовать Guava's ImmutableList.copyOf() для создания неизменяемой (не изменяемой) копии списка.

7 голосов
/ 29 июля 2011

Collections.unmodifiableCollection(..) просто переносит исходную коллекцию, отключая методы для модификации. Это не копирует это.

Если вы измените исходный список, коллекция «немодифицируемая» также изменится. Но клиент, имеющий только немодифицируемую коллекцию, не может ее изменить.

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