Ответ 1
Mutable означает, что вы можете изменить коллекцию на месте. Итак, если у вас есть коллекция c
и вы добавляете элемент с +=
, тогда c
изменился, и поэтому имеет все другие ссылки на эту коллекцию.
Неизменяемость означает, что объект коллекции никогда не изменяется; вместо этого вы создаете новые объекты коллекции с такими операциями, как +
или ++
, которые возвращают новую коллекцию. Это полезно в параллельных алгоритмах, поскольку для блокировки не требуется блокировки, чтобы добавить что-то в коллекцию. Это может быть связано с некоторыми издержками, но это свойство может быть очень полезным. Scala неизменяемые коллекции полностью устойчивые структуры данных.
Разница очень похожа на разницу между var
и val
, но заметьте:
- Вы можете изменить измененную коллекцию, привязанную к
val
на месте, хотя вы не можете переназначитьval
- вы не можете изменять неизменяемую коллекцию на месте, но если она назначена на
var
, вы можете переназначить этоvar
в коллекцию, созданную из нее с помощью операции, такой как+
.
Не все коллекции обязательно существуют в изменяемых и неизменяемых вариантах; в последний раз, когда я проверял, поддерживались только измененные очереди приоритетов.