De la documentación de Java 1.6 Collection Framework :
Las colecciones que no admiten ninguna operación de modificación (como
add
,remove
yclear
) se denominan no modificables . [...] Las colecciones que además garantizan que ningún cambio en el objeto de la colección será visible se denominan inmutables .
El segundo criterio me confunde un poco. Dado que la primera colección no se puede modificar y suponiendo que la referencia de la colección original se haya eliminado, ¿a qué cambios se hace referencia en la segunda línea? ¿Se refiere a los cambios en los elementos contenidos en la colección, es decir, al estado de los elementos?
Segunda pregunta:
Para que una colección sea inmutable, ¿cómo se hace para proporcionar las garantías adicionales especificadas? Si el estado de un elemento de la colección es actualizado por un hilo, ¿es suficiente para la inmutabilidad que esas actualizaciones en el estado no sean visibles en el hilo que contiene la colección inmutable?
Para que un cobro sea inmutable, ¿cómo se hace para brindar las garantías adicionales especificadas?
newCol = oldCol.add("element")
producirá una nueva colección que es copia de la antigua con 1 elemento más, y todas las referencias a la mismaoldCol
seguirán apuntando a la misma colección antigua sin cambios.