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.
- 1. Immutable vs Mutable C#
- 2. Scala immutable vs mutable. Qual è il modo in cui si dovrebbe andare?
- 3. scala mutable val Lista
- 4. struttura dati persistente vs immutable
- 5. Come raggruppare utilizzando più colonne nelle collezioni di scala
- 6. Scala - mutable (var) riferimento parametro parametro
- 7. Incoerenze di collezioni Scala
- 8. collezioni java vs mappa nel framework collezioni
- 9. buffer circolare di collezioni scala
- 10. La deforestazione in collezioni Scala
- 11. inconsistenza di scala 2.8 collezioni?
- 12. collezioni Scala diagramma di flusso
- 13. scala .seq vs .toSeq
- 14. Dov'è la classe Queue nelle Collezioni Java?
- 15. Scala - mutuamente esclusivi tratti
- 16. Immutable @ConfigurationProperties
- 17. Come rendere le collezioni immutabili di Scala detenere oggetti immutabili
- 18. C# immutable int
- 19. Iteratori per collezioni mutabili in Scala?
- 20. aggregazione groupwise efficiente su collezioni Scala
- 21. Scala - infisso vs notazione punto
- 22. Micro benchmark per il confronto di collezioni mutabili e immutabili Scala con java.util.concurrent * collezioni
- 23. Grails MongoDB Plugin: Collezioni embedded vs Riferimenti
- 24. Lista vs Coda vs Set di collezioni in Java
- 25. React, Redux e Immutable
- 26. Tipo Scala di tipo e tipo this.type in collezioni
- 27. Posso inizializzare una collezione immutable BCL usando le parentesi graffe?
- 28. Groovy classi @Immutable in Java
- 29. Scala: sliding (N, N) vs grouped (N)
- 30. Scala situazione di stallo con le collezioni parallele
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