Fermer

février 29, 2024

structure de données mutable / Blogs / Perficient

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

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