Il existe diverses classes pour stocker des collections d’éléments en plus des tableaux. Ces collections ont été introduites pour pallier aux différents inconvénients des tableaux (statiques de
taille fixe).
Ces collections sont soit sous la forme non-générique, c-à-d dédiées à un type particulier, ou génériques.
Elles sont définies dans les espaces de noms : System.Collections et System.Collections.Generic
Table of Contents
Exemples de collections
- La collection Stack : Classe LIFO qui représente une PILE (dernier entré premier
servi). - La collection Queue : Classe FIFO qui représente une FILE (premier entré premier
servi). - La collection ArrayList : qui représente un tableau dynamique non trié
- La collection SortedList : similaire à ArrayList mais trié sur une clé
- La collection Hashtable : Collection d’entrées clé/valeur. Les entrées sont triées selon le code de hachage de la clé.
- La collection Linked List : qui représente une liste linéaire doublement chaînée
2 La classe non générique ArrayList
ArrayList est capable de stocker des références sur des objets quelconques.
Exemple
ArrayList liste = new ArrayList();
liste.Add(“bonjour”);
liste.Add(“tout”);
liste.Add(“le monde”);
Les méthodes disponibles sont: add, insert, clone, contains, getEnumerator, reverse, sort…
Exemple
3. Les énumérateurs
Les énumérateurs permettent de parcourir une collection. Ils sont uniquement utilisés pour lire des données et ne peuvent pas modifier la collection. On les crée en implémentant les interfaces IEnumerable et IEnumerator :
IEnumerator contient 2 méthodes abstraites, MoveNext et Reset, et une propriété Current.
3.1 IEnumerator
L’implémentation de cette interface permet de lire la collection. Pour cela :
- Appeler MoveNext pour aller sur le premier élément de la collection,
- Puis utiliser Current pour lire les éléments.
- Chaque lecture suivante doit être précédée de MoveNext.
Si l’énumérateur est avant le premier élément ou après le dernier, MoveNext retourne false
et la valeur de Current devient indéfinie.
3.2 Itérateurs
Un itérateur est utilisé pour parcourir une collection et retourner une séquence de valeurs
du même type. L’épine dorsale de l’itérateur est le mot-clé yield qui spécifie la valeur retournée.
Pour créer un itérateur il faut implémenter la méthode GetEnumerator de l’interface
IEnumerable:
class MaClasse { public string[] item = {"Un", "Deux", Trois"}; public IEnumerator GetEnumerator() { for (int i = 0; i < item.Length; i++) yield return item[i]; } }
La présence de la méthode GetEnumerator rend la classe énumérable ce qui permet d’utiliser
la boucle foreach :
MaClasse mc = new MaClasse(); foreach (string item in mc) { Console.WriteLine(item); }
4. Les collections génériques
C’est une fonctionnalité permettant au programmeur de concevoir des classes ou des membres
de fonction tout en reportant la définition du type à l’instanciation de la classe.
Sans génériques, si on a besoin d’une pile d’entiers et d’une pile de chaînes de caractères, on doit
créer une collection pour chaque type.
Avec les génériques, on peut créer une collection générique utile pour tous les types, et reporter
la spécification du type réel au moment de la création des objets.
On utilise l’espace de noms System.Collections.Generic.
4.1 Exemples de classes génériques
List
Stack
Dictionary<TKey, TValue>
LinkedList