Tutorial .Net CE  |  Tutorial c# (.net)
Se cauta grafician

ArrayList – un vector mai bun!

February 1st, 2010 by zeltera

   ArrayList este o colectie simpla care poate stoca orice tip de obiect.

   Clasa ArrayList este continuta in spatiul de nume System.Collections. Aceasta clasa ne permite sa construim un vector care sa creasca in marime, adaugand mereu elemente noi.

   La declarare nu trebuie sa ii specificam marimea, fiind suficient doar :

    //declare
    ArrayList lista = new ArrayList();

    //Folosind metoda Add adugam obiecte, indiferent de tipul lor.

    //adaugam obiecte
    lista.Add("String");
    lista.Add(3);
    lista.Add(5.65);

    //folosim iteratia pentru
    //parcurgerea listei
    foreach (object o in lista)
    {
        Console.WriteLine(o);
    }
    //proprietatea count
    //pentru a afla numarul de elemente
    //din lista
    Console.WriteLine("Lista are {0} obiecte", lista.Count);

   Daca incercam o iteratie astfel, va fi aruncata o exceptie :

    foreach (string s in lista)
    {
        Console.WriteLine(s);
    }
Unable to cast object of type 'System.Int32' to type 'System.String'.

   Construim o lista de tip string si vom folosi metoda Sort pentru a o sorta alfabetic si Reverse pentru sortare inversa

    ArrayList listaString = new ArrayList();
    listaString.Add("def");
    listaString.Add("ghi ");
    listaString.Add("abc");
    listaString.Add("xyz");
    listaString.Add(" ");

    //sortare in ordine alfabetica
    listaString.Sort();
    foreach (object o in listaString)
    {
        //convertim in string
        Console.WriteLine(o.ToString());
    }

    Console.WriteLine("----");
    //sortare in ordine inversa
    listaString.Reverse();
    foreach (object o in listaString)
    {
        Console.WriteLine(o.ToString());
    }

Folosim metoda Remove pentru a sterge un obiect din lista.

    //sterge un obiect 
    //din lista
    lista.Remove("abc");

Pentru localizarea unui anumit element, apelam metoda BinarySearch si transmitem valoarea obiectului pentru a fi returnata pozitia obiectului in lista.

    Console.WriteLine(listaString.BinarySearch("def"));

Putem folosi si metoda Contains care va returna o valoare de tip boolean ( daca lista contine sau nu contine elementul cautat).

    Console.WriteLine(listaString.Contains("def"));

ArrayList si Array se aseamana foarte mult. Ambele permit stocarea unui numar mare de elemente.

ArrayList cu referinte

Vom crea o clasa Cont, cu 3 metode. Apoi vom construi obiecte pe baza ei si vom adauga referinte in ArrayList catre obiectele respective.

    class Cont
    {
        private decimal sold = 0;
        //scade o suma din sold
        public bool RetrageSuma(decimal suma)
        {
            //daca nu sunt suficienti bani

            if (suma > sold)
            {
                return false;
            }
            else
            {
                sold = sold - suma;
                return true;
            }
        }

        //adauga suma la debit
        public void Depune(decimal suma)
        {
            sold = sold + suma;
        }
        //afiseaza soldul
        public decimal Sold()
        {
            return sold;
        }
    }

In Main:

    //initial putem dam un parametru
    //dar poate pastra mai multe
    //sau mai putine elemente
    ArrayList conturi = new ArrayList(10);

    //creem instante ale clasei cont
    Cont student = new Cont();
    Cont elev = new Cont();

    //adaugam referinte
    conturi.Add(student);
    conturi.Add(elev);

   Observatie : nu adaugam un Cont in lista, ci doar facem ca un element din lista sa indice catre un Cont. Deci, nu se adauga obiectul insusi, ci o referinta.

   Cum accesem elementele ? Daca incercam astfel, cum suntem obisnuiti, vom avea eroare la compilare :

    Cont c = conturi[0];
    c.Sold();

Cannot implicitly convert type ‘object’ to ‘ContExemplu.Cont’. An explicit conversion exists (are you missing a cast?)

   Motivul este ca ArrayList este o lista de Objects. Vom rezolva problema convertind la tipul Cont.

    //facem conversie la Cont
    Cont c = (Cont)conturi[0];
    Console.WriteLine(c.Sold());

   O lista cu membrii ArrayList se gaseste pe msdn.

   Foarte asemanatoare cu ArrayList este clasa List, in plus avand avantajul de typesafe. Vom scrie despre aceasta clasa in articolul viitor.Exista si StringCollection, o colectie tipizata. Impreuna cu alte colectii din .Net care sunt strongly typed, aceste clase tipizate sunt usor de folosit in dezvoltare datorita faptului ca Visual Studio poate face automat validarea si nu mai e nevoie sa folosim conversia.

Codul folosit in exemplele anterioare:




3 raspunsuri pentru “ArrayList – un vector mai bun!”

  1. Timotei Dolean a spus:

    Mie nu-mi prea place ArrayList-ul ca nu e typesafe. Daca tot se vrea a fi folosit mai bine sa fie folosit DOAR pentru item-uri de tip referinta.

  2. zeltera a spus:

    Macar e mai bun decat…. array!

  3. Colectii in .Net (exemple in limbajul c#) | by zeltera a spus:

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

Leave a Reply

Intrebare antispan:
Care este rezultatul operatiei
+ =