mutable vs immuable dans les collections Scala
Je suis assez nouveau à la Scala et essaie de comprendre les collections de la hiérarchie. Je vois qu'il y a une distinction entre "mutable" et "immuable" collections, mais je ne comprends pas ce que cela signifie réellement au niveau de l'exécution et comment cela se rapporte à val
et var
. Quelqu'un peut-il me donner quelques précisions sur cette? Aussi, est-ce que chaque classe de collection ont une "mutable" version " et "immuable" version ou il y a certaines classes qui ne peut être "mutable" ou "immuable'?
Vous devez vous connecter pour publier un commentaire.
Mutable signifie que vous pouvez modifier la collection sur place. Donc, si vous avez une collection de
c
et si vous ajoutez un élément à+=
, puisc
a changé, et a donc toute autre référence à la collection.Immuable signifie que l'objet de collection ne change jamais; au lieu de cela, vous générez de nouveaux objets de collection, avec des opérations telles que
+
ou++
, qui retour une nouvelle collection. Ceci est utile dans simultanées algorithmes, car il ne nécessite pas de verrouillage d'ajouter un élément à une collection. Il peut se faire au détriment de certains frais généraux, mais cette propriété peut être très utile. Scala est immuable collections sont entièrement persistante des structures de données.La différence est très similaire à celle entre
var
etval
, mais rappelez-vous:val
en place, si vous ne pouvez pas réaffecter lesval
var
, vous pouvez réaffecter quevar
à une collection construite à partir d'une opération telle que la+
.Pas toutes les collections, il existe nécessairement en changeant et immuable variantes; la dernière fois que j'ai vérifié, seulement mutable files d'attente de priorité ont été pris en charge.
var a = 0
, si deux threads simultanément essayer de fairea = 1
eta = 2
simultanément, comment cela est-il géré? N'est-il pas besoin d'être bloqué?Immuable signifie immuable.
val
fait référence immuable, ce qui signifie que vous ne pouvez pas affecter une valeur à uneval
une fois qu'il a été initialisé. Immuable collections la collection elle-même immuable, pas la référence. Chaque fois que vous modifiez un immuable de la collection, une autre collection est produite au lieu de modifier la collection d'origine en place. La plupart des collections, ont à la fois immuable et changeante des versions, mais il y a des exceptions, bien sûr.