Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Colectii in .Net (exemple in limbajul c#)

   Colectiile reprezinta un mod de stoacare a obiectelor intr-o maniera structurata. Acestea sunt foarte utilizate in programare. Framework-ul .Net pune la dispozitia dezvoltatorilor foarte multe clase pentru lucrul cu colectiile. Toate aceste clase sunt continute in spatiul de nume System.Collections.

   .Net defineste o colectie ca fiind un obiect care implementeaza una sau mai multe interfete : System.Collections.ICollection, System.Collections.IListSystem, Collections.IDictionary. Astfel, vom avea o clasificare a colectiilor din framework:

   Colectii ordonate
   Aceste colectii implementeaza doar interfata ICollection si se deosebesc prin faptul ca ordinea in care elementele sunt inserate determina si ordinea in care elementele sunt regasite in colectie. Exemplu: Stack, Queue.

   Colectii indexate
   Acest tip de colectie se distinge prin faptul ca accesul la elemente se face prin index, (incepand cu 0), similar unui vector. Exemplu: ArrayList.

   Colectii pe baza de cheie
   Colectiile pe baza de cheie implementeaza interfata IDictionary. Ele contin elemente care pot fi accesate prin valoarea asociata cheii respectivului element (pereche cheie/valoare). Vom face o analiza scurta a clasei SortedList.

   Colectiile din System.Collections sunt colectii non-generice.

   Exista cateva colectii importante, care pot fi folosite in dezvoltare. Folosirea acestor colectii in mod non-generic este justificata doar in cazul mostenirilor sau atunci cand se doreste compatibilitate cu versiunile mai vechi de 2.0 ale framework-ului.

O clasa importanta este ArrayList, pe care am descris-o in articolul despre ArrayList.

Stack

   BitArray – este un vector care contine valoare de tip boolean, unde true este 1. false este 0.

    //declaram un vector de tip bit
    BitArray vectorBool = new BitArray(3);
    //metoda set stabileste valoarea elementului
    vectorBool.Set(0, true);
    vectorBool.Set(1, false);
    vectorBool.Set(2, true);

    //parcurgem tabloul
    foreach (bool b in vectorBool)
    {
        Console.WriteLine(b);
    }

Metoda And realizeaza operatia logica “AND” (articolul despre operatori in .Net):

    BitArray rezultat = new BitArray(3);
    rezultat = vectorBool.And(rezultat);

    foreach (var r in rezultat)
    {
        Console.WriteLine(r);
    }

De asemenea exista si metodele Or, Xor, Not:

    //SAU
    rezultat = vectorBool.Or(rezultat);

    //SAU EXCLUSIV
    rezultat = vectorBool.Xor(rezultat);

    //Negatie
    rezultat = vectorBool.Not();

Toti membrii clasei BitArray sunt descrisi pe msdn.

SortedList

    Aceasta clasa reprezinta o colectie de perechi cheie/valoare, care sunt sortate dupa cheie. Elementele sunt accesate cu ajutorul cheii si al indecsilor. O colectie de tip SortedList este o combinatie intre HashTable si un Array (articolul despre array). De ce? Pentru ca atunci cand elementele acestui tip de colectie sunt accesate prin cheie folosind proprietatea Item, colectia se comporta ca un HashTable. Cand elementele sunt accesate prin folosirea unui index cu ajutorul metodelor GetByIndex sau SetByIndex, colectia se comporta ca un Array.

    //construim lista si adaugam elemente
    SortedList lista = new SortedList();
    lista.Add("def", 5);
    lista.Add("abc", 2);
    lista.Add("ghi", 9);

    //accesem valoarea unui element, va afisa 5
    Console.WriteLine(lista["def"]);

Colectiile de acest tip vor sorta elementele dupa cheie. Daca vom accesa o valoare prin index, acel index va fi indicat de pozitia cheii in colectie:

    //va afisa 5
    Console.WriteLine("Valoarea de la pozitia a doua: " + lista.GetByIndex(1));

In lista, ne putem da seama usor, ca, sortate, elementele vor fi in ordinea: abc, def, ghi. Astfel, valoarea returnata va fi 5.

Pentru mai multe detalii despre clasa SortedList, siteul Microsoft.

Stack

   Clasa Stack (Stiva) reprezinta o structura de date de tip last-in-first-out (LIFO), adica ultimul element introdus in colectie va fi primul care va iesi din colectie.

   Un exemplu cu aceasta structura vom face in articolul urmator, folosind varianta generica a clasei.

Queue

   Clasa Queue (Coada) este o structura de date de tipul first-in-first-out (FIFO). Adica, primul element intrat in colectie este primul element care va iesi din colectie.

   Un exemplu cu aceasta structura vom face in articolul urmator, folosind varianta generica a clasei.

Cand este necesar sa folosim o colectie?

   Folosim o colectie cand este nevoie sa “punem la un loc” o serie de elemente care sunt asemanatoare, apoi ne vom referi la ele ca la un grup de date, avand posbilitatea de a le parcurge si de a le sorta.

   Pot aparea probleme de performanta in folosirea colectiilor, pentru ca, de regula, atunci cand apelam la colectii, inseamna ca avem de a face cu un numar mare de elemente. Implicit, performanta aplicatiei va fi afectata. Un lucru foarte important este alegerea corecta, potrivita, a tipului de colectie de care avem nevoie. Analizam daca se vor introduce toate elementele in colectie la initializarea aplicatiei, sau pe parcurs. Mai tinem cont si de locul unde vor fi introduse noile elementele in colectie (in mijloc, la sfarsit), sau daca ele vor fi stocate intr-o anumita ordine sau nu.

    Clasele din acest spatiu de nume sunt intuitive, produc o performanta buna, sunt usor de folosit.

    Toate detaliile despre spatiul de nume System.Collections sunt aici.

    In urmatorul articol, vom prezenta spatiul de nume System.Collections.Generic.

Category: Uncategorized

Your email address will not be published. Required fields are marked *

*