Sono abbastanza nuovo in Scala e sto cercando di capire la gerarchia delle collezioni. Vedo che c'è una distinzione tra collezioni "mutabili" e "immutabili", ma non capisco cosa questo significhi realmente a livello di implementazione e in che modo si riferisce a val
e var
. Qualcuno può darmi qualche idea su questo? Inoltre, ogni classe di collezione ha una versione 'mutabile' e una versione 'immutabile', o ci sono alcune classi che possono essere solo 'mutabili' o 'immutabili'?mutable vs. immutable nelle collezioni Scala
risposta
Mutabile significa che è possibile modificare la raccolta sul posto. Quindi, se si dispone di una collezione c
e si aggiunge un elemento con +=
, allora c
è stato modificato e così ogni altro riferimento a tale raccolta.
Immutabile significa che l'oggetto di raccolta non cambia mai; invece, si creano nuovi oggetti di raccolta con operazioni come +
o ++
, che restituiscono una nuova collezione. Ciò è utile negli algoritmi concorrenti, poiché non richiede alcun blocco per aggiungere qualcosa a una raccolta. Potrebbe comportare costi aggiuntivi, ma questa proprietà può essere molto utile. Le collezioni immutabili di Scala sono fully persistent data structures.
La differenza è molto simile a quella tra var
e val
, ma si badi bene:
- È possibile modificare una raccolta mutabile legato ad un
val
sul posto, anche se non è possibile riassegnare laval
- non è possibile modificare una raccolta immutabile sul posto, ma se è assegnata a un
var
, è possibile riassegnare quellovar
a una raccolta creata da esso mediante un'operazione come+
.
Non tutte le collezioni necessariamente esistono in varianti mutevoli e immutabili; l'ultima volta che ho controllato, erano supportate solo le code di priorità mutabili.
Immutabile significa immutabile. val
rende un riferimento non modificabile, il che significa che non è possibile assegnare un valore a val
dopo l'inizializzazione. Le collezioni immutabili rendono la collezione stessa immutabile e non il riferimento ad essa. Ogni volta che modifichi una collezione immutabile, viene prodotta un'altra collezione invece di modificare la raccolta originale sul posto. La maggior parte delle collezioni ha versioni immutabili e mutevoli, ma naturalmente ci sono delle eccezioni.
Grazie, questo ha senso! – astay13
Eccellente sintesi di mutable vs immutable. Bel lavoro. – Clive
In 'var a = 0', se due thread tentano contemporaneamente di fare' a = 1' e 'a = 2' contemporaneamente, come viene gestito? Non richiede il blocco? – Jus12