З базової документації колекції Java 1.6 :
Колекції, які не підтримують жодних операцій з модифікації (наприклад
add
,remove
таclear
), називаються немодифікованими . [...] Колекції, які додатково гарантують, що жодні зміни об’єкта колекції не будуть помітні, називаються незмінними .
Другий критерій мене трохи бентежить. З огляду на те, що перша колекція неможливо змінити, і якщо припустити, що оригінальну посилання на колекцію було видалено, про які зміни йдеться у другому рядку? Чи йдеться про зміни в елементах колекції, тобто про стан елементів?
Друге питання:
Щоб колекція була непорушною, як можна запропонувати додаткові вказані гарантії? Якщо стан елемента в колекції оновлюється потоком, чи достатньо для непорушності те, що ці оновлення в стані не видно на потоці, що містить незмінну колекцію?
Щоб колекція була непорушною, як можна взятись за надання додаткових гарантій?
newCol = oldCol.add("element")
буде створено нову колекцію, яка є копією старої з ще 1 елементом, а всі посилання наoldCol
заповіт все одно вказуватимуть на ту саму незмінену стару колекцію.