Из документации Java 1.6 Collection Framework :
Коллекции, которые не поддерживают какие-либо операции модификации (например
add
,remove
иclear
), называются неизменяемыми . [...] Коллекции, которые дополнительно гарантируют, что никакие изменения в объекте Collection никогда не будут видны, называются неизменяемыми .
Второй критерий меня немного смущает. Учитывая, что первая коллекция не может быть изменена, и если исходная ссылка на коллекцию удалена, какие изменения упоминаются во второй строке? Относится ли это к изменениям в элементах, содержащихся в коллекции, то есть к состоянию элементов?
Второй вопрос:
чтобы коллекция была неизменной, как можно предоставить указанные дополнительные гарантии? Если состояние элемента в коллекции обновляется потоком, достаточно ли для неизменности, чтобы эти обновления в состоянии не были видны в потоке, содержащем неизменяемую коллекцию?
Чтобы коллекция была неизменной, как можно предоставить указанные дополнительные гарантии?
newCol = oldCol.add("element")
будет создана новая коллекция, которая является копией старой с еще одним элементом, и все ссылки на нее по-oldCol
прежнему будут указывать на ту же неизменную старую коллекцию.