structure de données mutable / Blogs / Perficient

Scala, un langage de programmation qui combine des paradigmes de programmation orientés objet et fonctionnels, fournit une variété de structures de données mutables. Les collections mutables telles que ArrayBuffer et HashMap facilitent les modifications sur place, ce qui les rend bien adaptées aux situations exigeant des structures mutables hautes performances. Ils présentent une alternative conventionnelle, fournissant une contrepartie mutable à leurs équivalents immuables.
Toutes les collections scala mutables seront sous ce package – scala.collection.mutable.
Explorons quelques structures de données mutables.
1. Liste mutable (ListBuffer) :
scala.collection.mutable.ListBuffer est une implémentation de liste mutable dans Scala. Contrairement aux listes immuables, les éléments d’un ListBuffer peuvent être ajoutés ou supprimés.
Exemple:
import scala.collection.mutable.ListBuffer val mutableList = ListBuffer(1, 2, 3) mutableList += 4 // Appending an element mutableList -= 2 // Removing an element
Les listes mutables, implémentées sous le nom de ListBuffer, sont utiles lorsque des modifications fréquentes de la liste sont nécessaires. Ils offrent des opérations d’ajout et de suppression efficaces.
Opérations courantes sur les listes mutables (ListBuffer) :
- Ajout et suppression d’éléments :
mutableList += 5 // Append mutableList -= 3 // Remove
mutableList.insert(2, 10) // Insert 10 at index 2
mutableList(1) = 22 // Update element at index 1
- Conversion en liste immuable :
val immutableList = mutableList.toList // Convert to immutable list
- Itérer à travers les éléments :
for (element <- mutableList) { // Process each element }
Les listes mutables peuvent être pratiques dans les scénarios où la structure de la liste doit être fréquemment modifiée. En programmation fonctionnelle, les listes immuables sont généralement préférées pour leur sécurité et leur prévisibilité. Envisagez d’utiliser des listes mutables lorsque les exigences de performances ou des cas d’utilisation spécifiques justifient leur utilisation.
2. Ensemble mutable :
scala.collection.mutable.Set est une implémentation d’ensemble mutable dans Scala. Il permet d’ajouter ou de supprimer des éléments, offrant ainsi une flexibilité pour les modifications dynamiques.
Exemple:
import scala.collection.mutable.Set val mutableSet = Set(1, 2, 3) mutableSet += 4 // Adding an element mutableSet -= 2 // Removing an element
Les ensembles mutables offrent une flexibilité lorsque des modifications dynamiques de l’ensemble sont nécessaires.
Opérations courantes sur les ensembles mutables :
- Ajout et suppression d’éléments :
mutableSet += 5 // Add element mutableSet -= 3 // Remove element
val containsTwo = mutableSet.contains(2) // true
- Union, intersection et différence :
val anotherSet = Set(3, 4, 5) val unionSet = mutableSet ++ anotherSet // Union val intersectionSet = mutableSet.intersect(anotherSet) // Intersection val differenceSet = mutableSet.diff(anotherSet) // Difference
- Conversion en ensemble immuable :
val immutableSet = mutableSet.toSet // Convert to immutable set
- Itérer à travers les éléments :
for (element <- mutableSet) { // Process each element }
Les ensembles mutables peuvent être utiles dans les scénarios où la structure de l’ensemble nécessite des modifications fréquentes. En programmation fonctionnelle, les ensembles immuables sont généralement préférés pour leur sécurité et leur prévisibilité. Le choix entre des ensembles mutables et immuables dépend de cas d’utilisation spécifiques et de considérations de performances.
3. Carte mutable :
scala.collection.mutable.Map est une implémentation de carte mutable dans Scala. Il permet d’ajouter, de mettre à jour et de supprimer des paires clé-valeur, offrant ainsi une flexibilité pour les modifications dynamiques.
Exemple:
import scala.collection.mutable.Map val mutableMap = Map("one" -> 1, "two" -> 2, "three" -> 3) mutableMap += ("four" -> 4) // Adding an entry mutableMap -= "two" // Removing an entry mutableMap("three") = 33 // Updating a value
Les cartes mutables offrent une flexibilité lorsque des modifications dynamiques des paires clé-valeur sont nécessaires.
Opérations courantes sur les cartes mutables :
- Ajout et suppression d’entrées :
mutableMap += ("five" -> 5) // Add entry mutableMap -= "three" // Remove entry
mutableMap("two") = 22 // Update value
val containsTwoKey = mutableMap.contains("two") // true
val anotherMap = Map("three" -> 33, "four" -> 4) mutableMap ++= anotherMap // Merge maps
- Conversion en carte immuable :
val immutableMap = mutableMap.toMap // Convert to immutable map
- Itération à travers les entrées :
for ((key, value) <- mutableMap) { // Process each key-value pair }
Les cartes mutables peuvent être utiles dans les scénarios où la structure de la carte nécessite des modifications fréquentes. En programmation fonctionnelle, les cartes immuables sont généralement préférées pour leur sécurité et leur prévisibilité. Le choix entre des cartes mutables et immuables dépend de cas d’utilisation spécifiques et de considérations de performances.
4. Tampon mutable :
scala.collection.mutable.Buffer est un trait dans Scala qui représente une séquence mutable et indexée. Il étend le trait scala.collection.mutable.Seq, fournissant un ensemble de méthodes pour ajouter, mettre à jour et supprimer des éléments à des index spécifiques.
Exemple:
import scala.collection.mutable.Buffer val mutableBuffer: Buffer[Int] = Buffer(1, 2, 3) mutableBuffer += 4 // Appending an element mutableBuffer(1) = 22 // Updating an element mutableBuffer.remove(2) // Removing an element
Opérations courantes sur le tampon mutable :
mutableBuffer += 5 // Append an element
mutableBuffer(1) = 22 // Update element at index 1
mutableBuffer.remove(2) // Remove element at index 2
- Itérer à travers les éléments :
for (element <- mutableBuffer) { // Process each element }
Les tampons mutables, représentés par scala.collection.mutable.Buffer, offrent un moyen flexible et efficace de gérer les modifications dynamiques d’une séquence. Ils sont particulièrement utiles lorsque des modifications fréquentes du contenu et de la structure de la collection sont nécessaires.
Collections mutables (à partir du package scala.collection.mutable) :
Scala fournit diverses autres collections mutables comme ArrayBuffer, HashMap, Queue, LinkedList, etc.
Les références:
Voici les documents Spark approfondissant la création de structures de données mutables dans Scala.
Documentation officielle Spark :
https://docs.scala-lang.org/overviews/collections/overview.html
https://www.scala-lang.org/api/2.12.9/scala/collection/mutable/Buffer.html
Blog immuable : Scala : structure de données immuable / Blogs / Perficient
En conclusion, les structures de données mutables dans Scala offrent aux développeurs la possibilité d’apporter des modifications dynamiques à la structure et au contenu des collections. Ils offrent de la flexibilité mais nécessitent une gestion minutieuse de l’état mutable pour éviter les effets secondaires involontaires, en particulier dans la programmation concurrente ou parallèle.
Source link