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.