Da documentação do Java 1.6 Collection Framework :
Coleções que não oferecem suporte a nenhuma operação de modificação (como
add
,remove
eclear
) são chamadas de não modificáveis . [...] Coleções que garantem adicionalmente que nenhuma mudança no objeto Coleção será visível são chamadas de imutáveis .
O segundo critério me confunde um pouco. Dado que a primeira coleção não pode ser modificada, e supondo que a referência da coleção original tenha sido descartada, quais são as mudanças mencionadas na segunda linha? Está se referindo às mudanças nos elementos mantidos na coleção, ou seja, o estado dos elementos?
Segunda questão:
para que uma coleção seja imutável, como se faz para fornecer as garantias adicionais especificadas? Se o estado de um elemento na coleção for atualizado por um encadeamento, é suficiente para a imutabilidade que essas atualizações no estado não sejam visíveis no encadeamento que contém a coleção imutável?
Para que uma coleção seja imutável, como fornecer as garantias adicionais especificadas?
newCol = oldCol.add("element")
produzirá uma nova coleção que é uma cópia da antiga com mais 1 elemento, e todas as referências aoldCol
ainda apontarão para a mesma coleção antiga inalterada.