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 realmente significa en el nivel de implementación y cómo 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 vs. inmutable en las colecciones de Scala
Respuesta
Mutable significa que puede modificar la colección in situ. Por lo tanto, si tiene una colección c
y agrega un elemento con +=
, entonces c
ha cambiado, al igual que cualquier otra referencia a esa colección.
Inmutables significa que el objeto de colección nunca cambia; en su lugar, 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 fully persistent data structures.
La diferencia es muy similar a la existente entre var
y val
, pero la mente que:
- puede modificar una colección mutable unido a un
val
en el lugar, aunque no se puede reasignar laval
- no puede modificar una colección inmutable in situ, pero si está asignada a
var
, puede reasignar esavar
a una colección creada a partir de ella por una operación como+
.
No todas las colecciones existen necesariamente en variantes mutables e inmutables; La última vez que revisé, solo se admitieron las colas de prioridad mutables.
Inmutables significa inmutables. val
hace una referencia incambiable, lo que significa que no puede asignar un valor a 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.
- 1. Scala: Mutable vs. Inmutable Object Performance - OutOfMemoryError
- 2. Inmutable vs Mutable C#
- 3. Python scoping mutable vs inmutable
- 4. Clase mutable o inmutable?
- 5. Incoherencias de Colecciones Scala
- 6. Sin lista mutable de Scala
- 7. Contenedor inmutable con contenido mutable
- 8. Convertir mutable a mapa inmutable
- 9. Scala Inmutable MultiMap
- 10. clase mutable como hijo de una clase inmutable
- 11. Cómo convertir un HashMap mutable en un equivalente inmutable en Scala?
- 12. conjunto de Scala mutable e inmutable cuándo usar Val y var
- 13. volátil vs mutable en C++
- 14. La última palabra en NSStrings: mutable e inmutable
- 15. colecciones java vs mapa en colecciones framework
- 16. Scala mutable BitSet, ¿dónde están las operaciones de mutación?
- 17. enumeración vs inmutable en D
- 18. Transposición de colecciones arbitrarias de colecciones en Scala
- 19. Operando en las colecciones de Scala de manera genérica
- 20. La deforestación en colecciones Scala
- 21. ¿Cuál es la diferencia entre mutable e inmutable?
- 22. ¿Qué operaciones en las colecciones paralelas de Scala están paralelizadas?
- 23. Scala - parámetro de método mutable (var) referencia
- 24. scala 2.8 inconsistencia de colecciones?
- 25. copiar el contenido de un mapa inmutable al nuevo mapa mutable
- 26. Clases de casos de Scala en colecciones
- 27. const_cast VS mutable? ¿alguna diferencia?
- 28. Iteraciones sobre colecciones de Java en Scala
- 29. Actualizando las colecciones de Scala de forma segura
- 30. Scala interbloqueo con colecciones paralelas
¡Gracias, eso tiene sentido! – astay13
Excelente resumen de mutable vs inmutable. Buen trabajo. – Clive
En 'var a = 0', si dos hilos al mismo tiempo intentan hacer' a = 1' y 'a = 2' concurrentemente, ¿cómo se maneja? ¿No requiere bloqueo? – Jus12