concatenate - mutable vs. inmutable en las colecciones de Scala
create set scala (2)
Inmutable significa inmutable. val
hace una referencia incambiable, lo que significa que no puede asignar un valor a un val
una vez que se ha inicializado. Las colecciones inmutables hacen que la colección sea inmutable, no la referencia a ella. Cada vez que modifica una colección inmutable, se produce otra colección en lugar de modificar la colección original in situ. La mayoría de las colecciones tienen versiones inmutables y mutables, pero hay excepciones, por supuesto.
Soy bastante nuevo en Scala y trato de entender la jerarquía de las colecciones. Veo que hay una distinción entre colecciones "mutables" e "inmutables", pero no entiendo lo que esto significa realmente en el nivel de implementación y cómo esto se relaciona con val
y var
. ¿Alguien puede darme alguna idea sobre esto? Además, ¿cada clase de colección tiene una versión "mutable" y una versión "inmutable", o hay algunas clases que solo pueden ser "mutables" o "inmutables"?
Mutable significa que puede modificar la colección en el lugar. Por lo tanto, si tiene una colección c
y agrega un elemento con +=
, entonces c
ha cambiado, y lo mismo ocurre con cualquier otra referencia a esa colección.
Inmutable significa que el objeto de colección nunca cambia; en cambio, crea nuevos objetos de recopilación con operaciones como +
o ++
, que devuelven una nueva colección . Esto es útil en algoritmos concurrentes, ya que no requiere bloqueo para agregar algo a una colección. Puede ser a costa de algunos gastos generales, pero esta propiedad puede ser muy útil. Las colecciones inmutables de Scala son estructuras de datos completamente persistentes .
La diferencia es muy similar a la que existe entre var
y val
, pero val
cuenta que:
- Puede modificar una colección mutable vinculada a un
val
in situ, aunque no puede reasignar el valorval
- no puede modificar una colección inmutable in situ, pero si está asignada a una
var
, puede reasignar esavar
a una colección creada a partir de ella mediante una operación como+
.
No todas las colecciones existen necesariamente en variantes mutables e inmutables; la última vez que lo comprobé, solo se admitían colas de prioridad mutables.