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