Vous êtes sur la page 1sur 26

Langage C#

Collection & Gnrique


Syrine Khiari-Sami Ayari ESPRIT
2011-2012

Objectif de ce cours

Contrlez un groupe de donnes associes dans une application .NET en employant les collections. Amliorez la sret de type et l'excution d'application .NET en employant les collections gnriques. Contrlez les donnes dans une application .NET en employant les collections spcialises. Employez les collections et choisissez la meilleure classe de collection pour diffrentes conditions. Employez les dictionnaires et choisissez la meilleure classe de dictionnaire pour diffrentes conditions.
2

Les Collections!

Une collection est un objet qui vous permet simplement de regrouper d'autres objets. Lors du choix de la faon dont vous souhaitez regrouper vos objets, vous devez d'abord penser ce que vous voulez faire avec vos objets. Le. NET Framework fournit des classes spcialises pour le stockage des donnes et la rcupration.

Les collections

ArrayList :Une collection simple qui peut stocker n'importe quel type d'objet. Les instances augmentent n'importe quelle capacit exige. Queue A first-in, first-out (FIFO) collection: Vous pourriez employer une file d'attente sur une transmission de messages serveur pour stocker des messages temporairement avant le traitement ou pour dpister des ordres de client ce besoin d'tre trait sur un du premier arriv, premier-servent la base.

Les collections

Stack A last-in, first-out (LIFO) collection: vous pourriez employer une pile pour dpister des changements de sorte que le changement le plus rcent puisse tre dfait. StringCollection: comme ArrayList, moins que des valeurs soient fortement types comme des string, StringCollection ne supporte pas le trie. BitArray: une collection de valeurs boolennes.

ArrayList
la classe ArrayList ( dans le namespace System.Collections) permet d'ajouter les objets qui peuvent tre consults directement en utilisant un index ou tre consults dans une srie en utilisant un foreach. La capacit d'un ArrayList augmente selon les besoins.
ArrayList al = new ArrayList(); al.Add("Hello"); al.Add("World"); al.Add(5); Console.WriteLine("The array has " + al.Count + " items:"); foreach (object s in al) {Console.WriteLine(s.ToString());}
6

ArrayList
Dans la pratique, vous ajoutez gnralement des articles d'un type unique un ArrayList. Ceci vous permet dappeler la mthode Sort pour trier les objets. Vous pouvez utiliser la mthode Remove pour supprimer un objet et la mthode Insert pour ajouter un lment l'endroit indiqu dans l'index.
ArrayList al = new ArrayList(); al.Add("Hello"); al.Add("World"); al.Add("this"); al.Add("is"); al.Add("a"); al.Add("test"); al.Remove("test"); al.Insert(4, "not"); al.Sort(); foreach (object s in al) Console.WriteLine(s.ToString());

ArrayList
Vous pouvez galement appeler la mthode ArrayList.Reverse pour inverser l'ordre courant des articles dedans. Vous pouvez appeler la mthode d'ArrayList.BinarySearch. BinarySearch renvoie l'index de l'article. De mme, la mthode ArrayList.Contains renvoie vrai si l'ArrayList contient l'objet indiqu sinon faux.
ArrayList al = new ArrayList(); al.AddRange(new string[] {"Hello", "world", "this", "is", "a", "test"}); Console.WriteLine(al.BinarySearch("this"));
8

Queue et Stack
Les classes Queue et Stack sont situes dans le namespace de System.Collections. La classe Queue emploie un ordre FIFO, alors que la classe Stack emploie un ordre LIFO. La classe Queue utilise les mthodes Enqueue et Dequeue pour ajouter et supprimer des objets, tant que la classe Stack utilise les mthodes Push et Pop. Vous pouvez utiliser aussi Queue.Peek et Stack.Peek pour accder un objet sans le supprimer. On utilise Queue.Clear et Stack.Clear pour supprimer tout les objets.
9

Queue et Stack
Queue q = new Queue(); q.Enqueue("Hello"); q.Enqueue("world"); q.Enqueue("just testing"); Console.WriteLine("Queue demonstration:"); for (int i = 1; i <= 3; i++) Console.WriteLine(q.Dequeue().ToString()); Stack s = new Stack(); s.Push("Hello"); s.Push("world"); s.Push("just testing"); Console.WriteLine("Stack demonstration:"); for (int i = 1; i <= 3; i++) Console.WriteLine(s.Pop().ToString());
10

BitArray et BitVector32
BitArray est un tableau de valeurs boolnnes, u chaque lment presente true ou false. BitArray peut prendre nimporte quel taille, cependant BitVector32 est limit 32 bits exactement. Si vous avez besoin de sauvegarder des valeurs boolenes, utilisez BitVector32 chaque fois vous avez besoin de 32 lments ou moin, sinon utilisez BitArray.

11

Les Dictionnaires
Les dictionnaires mappent les cls des valeurs. Le framework .NET comporte les dictionnaires suivants: Hashtable: un dictionnaire de nom/valeur paires qui peut tre recherch par nom ou index. SortedList: un dictionnaire peut tre tri automatiquement par cl. StringDictionary: un hashtable avec nom/valeur paires implement avec un typage fort string.

12

Les Dictionnaires
ListDictionary: un dictionnaire optimis pour des petites listes dobjets moin de 10 lments. HybridDictionary: un dictionnaire qui utilise ListDictionary pour le sauvegarde des lments quand le nombre des lments est petit et sera automatiquement switch un Hashtable quand la liste se dveloppe. NameValueCollection: un dictionnaire de nom/valeur pairess de chaine de caractres qui permet de rcuprer par nom ou index.

13

La classe Hashtable
Le Hashcode d'un objet est un nombre retourn par la mthode GetHashCode de la classe Object. Il faut retenir que ce code de hachage est spcifique chaque instance d'objet.

14

la classe SortedList
SortedList (dans System.Collections namespace) est un dictionnaire qui consiste un cl/valeur paires. Le cl et la valeur peuvent tre des objets. SortedList est tri automatiquement par la cl .
SortedList sl = new SortedList(); sl.Add("Stack", "Represents a LIFO collection of objects."); sl.Add("Queue", "Represents a FIFO collection of objects."); sl.Add("SortedList", "Represents a collection of key/value pairs."); foreach (DictionaryEntry de in sl) {Console.WriteLine(de.Value);} Console.WriteLine(sl["Queue"]); Console.WriteLine(sl.GetByIndex(0));
15

la classe ListDictionary

la classe ListDictionary (dans le namespace de System.Collections.Specialized) aussi fournit des fonctionnalits semblables, et est optimis pour excuter mieux avec des listes de moins que 10 articles.

16

la classe HybridDictionary

HybridDictionary (dans le namespace de System.Collections.Specialized) fournit la mme excution que ListDictionary avec des petites listes, mais il change de comportement lorsque la liste augmente.

17

la classe StringDictionary

StringDictionary (dans le namespace de System.Collections.Specialized) fournit des fonctionnalits semblables SortedList, sans trier le dictionnaire automatique, et exige des cls et des valeurs de type chaine de caractres.

18

la classe NameValueCollection
NameValueCollection fournit galement des fonctionnalits semblables, mais il vous permet d'employer une chaine de caractres ou un nombre entier pour les cls. En outre, vous pouvez avoir plusieurs valeurs de type chaine de caractres pour un seul cl.
NameValueCollection sl = new NameValueCollection(); sl.Add("Stack", "Represents a LIFO collection of objects."); sl.Add("Stack", "A pile of pancakes."); sl.Add("Queue", "Represents a FIFO collection of objects."); sl.Add("Queue", "In England, a line."); sl.Add("SortedList", "Represents a collection of key/value pairs."); foreach (string s in sl.GetValues(0)) Console.WriteLine(s); foreach (string s in sl.GetValues("Queue")) Console.WriteLine(s);
19

Cration dune carte de crdit


Hands-on Lab.

Exercice #1:

En utilisant un

ArrayList

Generic Collections
Les collections comme ArrayList permettre de travailler avec tout type. Cependant, l'accs la collection exige que vous castez le type d'objet au type correct. Non seulement a complique la programmation et a augmente le risque derreur mais aussi a dgrade les performances.
En utilisant les generiques, vous pouvez crer des collections fortement types pour n'importe quelle classe, y compris les classes cres par le dveloppeur. Ceci simplifie le dveloppement , aide assurer l'utilisation approprie des types, et peuvent amliorer l'excution en rduisant la ncessit de casting.
21

Generic Collection Classes

22

Generic SortedList<T,U> Collection

SortedList<string, int> sl = new SortedList<string,int>(); sl.Add("One", 1); sl.Add("Two", 2); sl.Add("Three", 3); foreach (int i in sl.Values) Console.WriteLine(i.ToString());

23

Using Generics with Custom Classes


public class person { string firstName; string lastName; public person(string _firstName, string _lastName) { firstName = _firstName; lastName = _lastName; } override public string ToString() { return firstName + " " + lastName; }} SortedList<string, person> sl = new SortedList<string,person>(); sl.Add("One", new person("Mark", "Hanson")); sl.Add("Two", new person("Kim", "Akers")); sl.Add("Three", new person("Zsolt", "Ambrus")); foreach (person p in sl.Values) Console.WriteLine(p.ToString());

24

Generic Queue<T> and Stack<T> Collections

Queue<person> q = new Queue<person>(); q.Enqueue(new person("Mark", "Hanson")); q.Enqueue(new person("Kim", "Akers")); q.Enqueue(new person("Zsolt", "Ambrus")); Console.WriteLine("Queue demonstration:"); for (int i = 1; i <= 3; i++) Console.WriteLine(q.Dequeue().ToString()); Stack<person> s = new Stack<person>(); s.Push(new person("Mark", "Hanson")); s.Push(new person("Kim", "Akers")); s.Push(new person("Zsolt", "Ambrus")); Console.WriteLine("Stack demonstration:"); for (int i = 1; i <= 3; i++) Console.WriteLine(s.Pop().ToString());
25

Cration dune carte de crdit avec les gnriques


Hands-on Lab.

Exercice #1:

En utilisant un Generic List<T>

Vous aimerez peut-être aussi