Cuprins >> Structuri De Date > Lista de tip array (Array List)
Articol de importanță mică, sau discuție

ArrayList este un array dinamic. Asta înseamnă că un ArrayList poate avea orice număr de obiecte, de orice tip. Această structură de date a fost inițial concepută pentru a simplifica procesele de adăugare a elementelor noi într-un array.

Sub capotă, un ArrayList este un array a cărui mărime este dublată de fiecare dată când spațiul disponibil se termină. Dublarea dimensiunii aray-ului intern este o strategie foarte eficientă, care reduce numărul de copieri de elemente pe termen lung. Nu voi descrie acest proces aici.

ArrayList este o colecție pe care e bine să o evitați. Însă, este adesea folosită în aplicații vechi - deci, trebuie menținută. Versiuni mai noi de .NET oferă colecții mult mai bune, precum Lista, despre care vom învăța în viitor.

Informații suplimentare

Motivul pentru însăși existența ArrayList-ului este acela că Microsoft a decis să lanseze C# 1.0 în grabă, în Ianuarie 2002, ca și competitor direct al Java. Atât de în grabă, încât au decis să îl lanseze fără generice și alte câteva elemente cruciale ale unui limbaj, ceea ce a condus la o improvizație temporară ce implica împachetarea și despachetarea valorilor în și din object, așa cum face ArrayList.

Această structură de date este foarte simplu de utilizat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
 
namespace BunaLume
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList arrayLista = new ArrayList();
            
            arrayLista.Add(56);
            arrayLista.Add("String");
            arrayLista.Add(new Window());
            
            Console.ReadLine();
        }
    }
}

Dezavantajul structurii de date ArrayList este că trebuie să convertiți valorile preluate înapoi în tipul original:

1
int valoareArrayList = (int)arrayLista[0];

The ArrayList are următoarele metode importante:

Add() - Adaugă un element obiect nou la sfârșitul listei. Putem continua adăugarea elementelor în colecție până când memoria se va termina. Exemplu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System.Collections;
 
namespace BunaLume
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creaza un ArrayList si adauga 3 elemente
            ArrayList lista = new ArrayList();
            lista.Add("Unu");
            lista.Add("Doi");
            lista.Add("Trei");
            
            Console.ReadLine();
        }
    }
}

AddRange() - combină două ArrayList. Pe plan intern, AddRange() utilizează metodele Array.Copy() sau CopyTo(), care au o performanță mai bună decât unele bucle. Exemplu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Collections;
 
namespace BunaLume
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creaza un ArrayList cu doua valori
            ArrayList lista = new ArrayList();
            lista.Add(5);
            lista.Add(7);
            
            // Creaza al doilea ArrayList
            ArrayList lista2 = new ArrayList();
            lista2.Add(10);
            lista2.Add(13);
            
            // Adauga al doilea ArrayList la primul
            lista.AddRange(lista2);
            
            // Afiseaza valorile
            foreach (int i in lista);
                Console.WriteLine(i);
            
            Console.ReadLine();
        }
    }
}

Clear() - elimină elementele unui ArrayList. Pe plan intern, aceasta apelează metoda Array.Clear(), pe care am explicat-o în lecția anterioară. Exemplu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections;
 
namespace BunaLume
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creaza un ArrayList cu doua elemente
            ArrayList lista = new ArrayList();
            lista.Add(9);
            lista.Add(10);
            
            // Afiseaza numarul de elemente in ArrayList
            Console.WriteLine(lista.Count);
            
            // Sterge elementele ArrayList
            lista.Clear();
            
            // Afiseaza numarul de elemente din nou
            Console.WriteLine(lista.Count);
            
            Console.ReadLine();
        }
    }
}

Sort(), Reverse() - aceste metode fac exact ceea ce spune numele lor: sortează un ArrayList, sau inversează ordinea elementelor sale. Exemplu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Collections;
 
namespace BunaLume
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creaza un ArrayList cu patru elemente de tip string
            ArrayList lista = new ArrayList();
            lista.Add("Pisica");
            lista.Add("Zebra");
            lista.Add("Caine");
            lista.Add("Vaca");
            
            // Sorteaza ArrayList
            lista.Sort();
            
            // Afiseaza elementele ArrayList
            foreach (int valoare in lista)
                Console.WriteLine(valoare);
            
            // Inverseaza ordinea elementelor din ArrayList
            lista.Reverse();
            
            // Afiseaza elementele ArrayList din nou
            foreach (int valoare in lista)
                Console.WriteLine(valoare);
            
            Console.ReadLine();
        }
    }
}

Insert(), RemoveAt(), RemoveRange() - metode folosite pentru a adăuga sau elimina elemente. Remove() utilizează un index numeric pentru a specifica elementul pe care doriți să îl stergeți. RemoveRange() specifică un index de pornire din care ar trebui să înceapă eliminarea elementelor, și un alt parametru numeric pentru a specifica câte elemente vor fi eliminate. Exemplu:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections;
 
namespace BunaLume
{
    class Program
    {
        static void Main(string[] args)
        {
            // Creaza un ArrayList cu trei elemente de tip string
            ArrayList lista = new ArrayList();
            lista.Add("Unu");
            lista.Add("Doi");
            lista.Add("Trei");
            
            // Sterge elementul din mijlocul ArrayList
            lista.RemoveAt(1); // Va deveni [Unu, Trei]
            
            // Insereaza o noua valoare la inceputul ArrayList
            lista.Insert(0, "Morcov"); // Devine [Morcov, Unu, Trei]
            
            // Sterge primele doua elemente din ArrayList
            lista.RemoveRange(0, 2);
            
            // Afiseaza elementele ArrayList
            foreach (int valoare in lista)
                Console.WriteLine(valoare);
            
            Console.ReadLine();
        }
    }
}

Cea mai importantă proprietate a ArrayLists este Count:

Count - returnează numărul de elemente dintr-un ArrayLists.