2011-11-27 26 views
30

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

50

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:

  1. puede modificar una colección mutable unido a un val en el lugar, aunque no se puede reasignar la val
  2. no puede modificar una colección inmutable in situ, pero si está asignada a var, puede reasignar esa var 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.

+0

¡Gracias, eso tiene sentido! – astay13

+4

Excelente resumen de mutable vs inmutable. Buen trabajo. – Clive

+0

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

6

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.

Cuestiones relacionadas