Z dokumentacji Java 1.6 Collection Framework :
Kolekcje, które nie obsługują żadnych operacji modyfikacji (takich jak
add
,remove
iclear
) są określane jako niemodyfikowalne . […] Kolekcje, które dodatkowo gwarantują, że żadna zmiana w obiekcie Collection nigdy nie będzie widoczna, nazywane są niezmiennymi .
Drugie kryterium trochę mnie dezorientuje. Biorąc pod uwagę, że pierwsza kolekcja jest niemodyfikowalna i przy założeniu, że oryginalne odniesienie do kolekcji zostało usunięte, jakie zmiany są wymienione w drugiej linii? Czy to odnosi się do zmian w elementach znajdujących się w kolekcji, czyli stanu elementów?
Drugie pytanie:
Aby kolekcja była niezmienna, w jaki sposób można zapewnić dodatkowe określone gwarancje? Jeśli stan elementu w kolekcji jest aktualizowany przez wątek, czy dla niezmienności wystarczy, że te aktualizacje w stanie nie są widoczne w wątku zawierającym niezmienną kolekcję?
Aby kolekcja była niezmienna, w jaki sposób można zapewnić dodatkowe określone gwarancje?
newCol = oldCol.add("element")
utworzy nową kolekcję, która jest kopią starej z 1 elementem więcej, a wszystkie odwołania dooldCol
będą nadal wskazywały na tę samą niezmienioną starą kolekcję.