Les collections en C#
Les collections sont des classes spécialisées pour le stockage et la récupération de données. Ces classes prennent en charge les piles, les files, les listes et les tables de hachage. La plupart des classes de collection implémentent les mêmes interfaces.
Les classes de collection servent à diverses tâches, telles que l’allocation dynamique de mémoire et l’accès à une liste d’éléments à partir d’un index, etc. Ces classes créent des collections d’objets de la classe Object, qui est la classe de base de tous les types de données en C#.
.NET prend en charge deux types de collections, les collections génériques et les collections non génériques. la figure suivant représente la correspondance entre ces classes.
1. Les collections non génériques
Dans les collections non génériques, chaque élément peut représenter une valeur d’un type différent. La taille d’une collection n’est pas fixe, et les éléments peuvent être ajoutés ou supprimés au moment de l’exécution. Avant d’utiliser les collections non génériques, vous devez inclure l’espace de nom suivant :
using System.Collections;
1.1. ArrayList
La classe ArrayList est une collection qui peut être utilisée pour tout type ou objet. Arraylist est une classe similaire à un tableau, mais elle peut être utilisée pour stocker des valeurs de différents types.
Un Arraylist n’a pas de taille spécifique. N’importe quel nombre d’éléments peut être stocké.
ArrayList numbers = new ArrayList(); numbers.Add(1); //int numbers.Add(1.9803); //float numbers.Add("one"); //string numbers.Add('o'); //char foreach (object nbr in numbers) { Console.Write("{0} ", nbr); }
La sortie :
1 1.9803 one o
1.2. HashTable
HashTable est similaire à arraylist, mais représente les éléments sous forme de clé et valeur.
Hashtable languages = new Hashtable(); languages.Add(1, "Java"); languages.Add(2, "C#"); languages.Add(3, "Python"); languages.Add(4, "C++"); foreach (DictionaryEntry language in languages) { Console.WriteLine("Clé: {0}, Valeur: {1}", language.Key, language.Value); }
La sortie :
Clé: 4, Valeur: C++ Clé: 3, Valeur: Python Clé: 2, Valeur: C# Clé: 1, Valeur: Java
1.3. SortedList
La classe SortedList est une classe qui combine l’arraylist et hashtable, ainsi représente les données sous forme de paire clé/valeur, et organise tous les éléments dans un ordre trié.
SortedList languages = new SortedList(); languages.Add(1, "Java"); languages.Add(2, "C#"); languages.Add(3, "Python"); languages.Add(4, "C++"); foreach (DictionaryEntry language in languages) { Console.WriteLine("Clé: {0}, Valeur: {1}", language.Key, language.Value); }
La sortie :
Clé: 1, Valeur: Java Clé: 2, Valeur: C# Clé: 3, Valeur: Python Clé: 4, Valeur: C++
1.3. Stack
Il représente une collection d’objets LIFO(Last In First Out). Lorsque vous ajoutez un élément dans la liste, cela s’appelle PUSH ou Empiler et lorsque vous le supprimez, cela s’appelle POP ou Dépiler.
Stack languages = new Stack(); languages.Push("Java"); languages.Push("C#"); languages.Push("Python"); languages.Push("C++"); foreach (object o in languages) { Console.WriteLine(o); }
La sortie :
C++ Python C# Java
1.4. Queue
Il représente une collection d’objets FIFO(First In First Out). Lorsque vous ajoutez un élément à la liste, cela s’appelle « Enqueue » ou « Enfiler » et lorsque vous supprimez un élément, cela s’appelle « Deque » ou « Défiler ».
Queue languages = new Queue(); languages.Enqueue("Java"); languages.Enqueue("C#"); languages.Enqueue("Python"); languages.Enqueue("C++"); foreach (object o in languages) { Console.WriteLine(o); }
La sortie :
C++ Python C# Java
2. Les collections génériques
Les collections génériques fonctionnent sur un type spécifique, tandis que les collections non génériques fonctionnent sur le type « Object ». Avant d’utiliser les collections non génériques, vous devez inclure l’espace de nom suivant : using System.Collections.Generic;
2.1. List
Il s’agit d’un tableau dynamique offrant des fonctionnalités similaires à celles de la classe non générique ArrayList.
List<int> numbers = new List<int>(); numbers.Add(10); numbers.Add(20); numbers.Add(30); numbers.Add(40); foreach (int nbr in numbers) { Console.WriteLine(nbr); }
La sortie :
10 20 30 40
2.1. Dictonary
Il stocke les données sous forme de paires clé-valeur et fournit des fonctionnalités similaires à celles de la classe non générique Hashtable.
Dictionary<int, string> languages = new Dictionary<int, string>(); languages.Add(1, "Java"); languages.Add(2, "C#"); languages.Add(3, "Python"); languages.Add(4, "C++"); foreach (KeyValuePair<int, string> language in languages) { Console.WriteLine("Clé: {0}, Valeur: {1}", language.Key, language.Value); }
La sortie :
Clé: 1, Valeur: Java Clé: 2, Valeur: C# Clé: 3, Valeur: Python Clé: 4, Valeur: C++
2.1. SortedList
Il s’agit d’une liste triée, stocke les données sous forme de paires clé-valeur et fournit des fonctionnalités similaires à celles de la classe non générique SortedList.
SortedList<int, string> langages = new SortedList<int, string> (); langages.Add(1, "Java"); langages.Add(2, "C#"); langages.Add(3, "Python"); langages.Add(4, "C++"); foreach (KeyValuePair<int, string> language in langages) { Console.WriteLine("Clé: {0}, Valeur: {1}", language.Key, language.Value); }
La sortie :
Clé: 1, Valeur: Java Clé: 2, Valeur: C# Clé: 3, Valeur: Python Clé: 4, Valeur: C++
2.1. Stack
Il s’agit d’une liste LIFO(Last In First Out) et et fournit des fonctionnalités similaires à celles de la classe non générique Stack.
Stack<string> languages = new Stack<string>(); languages.Push("Java"); languages.Push("C#"); languages.Push("Python"); languages.Push("C++"); foreach (string language in languages) { Console.WriteLine(language); }
La sortie :
C++ Python C# Java
2.1. Queue
Il s’agit d’une liste FIFO(First In First Out) et et fournit des fonctionnalités similaires à celles de la classe non générique Queue.
Queue<string> languages = new Queue<string>(); languages.Enqueue("Java"); languages.Enqueue("C#"); languages.Enqueue("Python"); languages.Enqueue("C++"); foreach (string language in languages) { Console.WriteLine(language); }
La sortie :
C++ Python C# Java
Hello, il y a une petite erreur sur l’image en début de page. Génériques et Non génériques sont inversées.
Merci pour cette remarque, c’est corrigé 🙂