Каково различие между ImmutableList Google и Collections.unmodifiableList ()?

От ImmutableList javadocs:

В отличие от Collections.unmodifiableList (java.util. Список), то, которое является представлением отдельного набора, который может все еще измениться, экземпляр ImmutableList, содержит его собственные частные данные и никогда не будет изменяться. ImmutableList удобен для общедоступных статических заключительных списков ("постоянные списки") и также позволяет Вам легко сделать "защитную копию" списка предоставленной Вашему классу вызывающей стороной.

Делает это означает что:

  1. если у меня есть ImmutableList объектов Размера (например), тогда, я не могу изменить объект Размера в нем?
  2. и если у меня есть Collections.unmodifiableList (список) объектов Размера тогда, я могу не только добавить или удалить какой-либо объект, но я могу изменить их (например, называют setDimension (ширина, высота) методом)?
49
задан gpampara 2 February 2010 в 19:50
поделиться

4 ответа

Нет, неизменяемость применяется только к сумме и ссылки на объекты в Коллекции, и не затрагивает изменчивость объектов, которые вы помещаете в Коллекцию.

Что Immutable list выигрывает по сравнению со стандартным JDK Collections.unmodifiableList, так это то, что с помощью ImmutableList вы гарантируете, что указанные объекты, их порядок и размер не могут измениться из любого источника. С помощью Collections.unmodifiableList, если что-то еще имеет ссылку на базовый список, этот код может изменить список, даже если у вас есть ссылка на неизменяемый список.

Однако, если вы хотите истинную неизменяемость, вы должны заполнить список неизменяемыми объектами.

53
ответ дан 7 November 2019 в 11:47
поделиться

Использование коллекций . TunModiFialeList создает обертку вокруг вашего списка. Если базовый список изменяется, так что делает вид вашего NUMMODIFIABLELIST.

Как говорит документация, код Google создает копию. Это более дорогие вычисления и потребляет больше памяти, но если кто-то изменяет оригинальный список, он не может повлиять на иммутаблель.

Никто из них не помешает вам изменять объект в списке, либо на полях или полях полей и т. Д.

17
ответ дан 7 November 2019 в 11:47
поделиться
  1. Нет, содержащиеся отдельные объекты все еще могут быть изменены. Коллекция действительно только хранение ссылок к содержащимся объектам, а не полной копии каждого объекта.
  2. Вы можете изменить список, изменяя родительскую коллекцию, которую вы называли коллекциями. TunModifiableList (список). Но да, вы можете использовать SetDimension, чтобы изменить элемент хранимого списка.
3
ответ дан 7 November 2019 в 11:47
поделиться

ImmutableList аналогичен Collections.unmodifiableList (новый ArrayList (список)) . Обратите внимание, что вновь созданный ArrayList не назначен полю или переменной.

6
ответ дан 7 November 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: