Salt la conținutul principal
Modulul 4 · Lecția 2 din 28/14 în curs~15 min
Lecții din modul (2/2)

Colecții și ArrayList

Matricele tradiționale din Java au o dimensiune fixă ​​definită în momentul creării. Pentru a lucra cu liste de date a căror dimensiune poate varia dinamic, Java oferă Java Collections Framework. Clasa cel mai des folosită este ArrayList.

Clasa ArrayList și generice

ArrayList implementează o matrice redimensionabilă în memorie. Pentru a declara un ArrayList, trebuie să specificăm tipul de elemente pe care le va conține prin includerea lui între paranteze unghiulare < >. Această caracteristică se numește Generic.

Pentru a folosi ArrayList, trebuie să îl importam la începutul fișierului din java.util.ArrayList.

Declarație și instanțiere:

Java
import java.util.ArrayList;

ArrayList<String> shoppingList = new ArrayList<>();

Metode de bază

Iată operațiunile fundamentale pe un ArrayList:

  1. add(element): adaugă un element la sfârșitul listei.
  2. get(index): Returnează elementul la indexul specificat (0-indexat).
  3. size(): returnează numărul de elemente aflate în prezent în listă.
  4. remove(index): elimină elementul de la indexul specificat.
Java
shoppingList.add("Pane");
shoppingList.add("Latte");

System.out.println("Elementi: " + shoppingList.size()); // Prints 2
System.out.println("Primo elemento: " + shoppingList.get(0)); // Prints "Pane"

Repetarea unei liste (pentru fiecare)

Bucla for-each este structura ideală pentru a repeta prin toate elementele unei colecții:

Java
for (String item : shoppingList) {
    System.out.println(item);
}

Array vs ArrayList: memorie și performanță

Deși ArrayList este mult mai flexibil decât o matrice statică, vine cu compromisuri de performanță și memorie:

  • Static Array: este alocat într-un bloc de memorie contiguu, are o dimensiune fixă, iar accesarea elementelor prin index este extrem de rapidă. Stochează tipurile primitive direct, fără suprasarcină.
  • ArrayList: Intern, gestionează o matrice care este redimensionată (prin crearea unei noi matrice mai mare și copierea elementelor vechi) atunci când capacitatea sa inițială (de obicei 10) este depășită. În plus, stochează doar referințe la obiecte, introducând supraîncărcare de memorie pentru fiecare element.

Autoboxing și Unboxing

Deoarece ArrayList poate deține numai obiecte, Java realizează automat conversii între tipurile primitive și clasele lor de wrapper respective:

  • Autoboxing: conversie automată de la un tip primitiv la o clasă wrapper. De exemplu, când scrieți numbers.add(42), Java convertește automat 42 (int) în Integer.valueOf(42) (Integer).
  • Unboxing: conversie automată de la o clasă wrapper la un tip primitiv. De exemplu, când executați int num = numbers.get(0), Java convertește intern Integer în int.

Încercați-l singur

Exercițiu#java.m4.l2.e1
Încercări: 0Se încarcă…

Importați ArrayList, declarați o ArrayList cu șiruri de nume denumite. Adăugați Alice și Bob la listă, apoi imprimați dimensiunea acesteia folosind metoda size().

Se încarcă editorul...
Afișează indiciu

Includeți `import java.util.ArrayList;` în partea de sus. Creați lista cu `ArrayList<String> names = new ArrayList<>();`, adăugați elementele și imprimați dimensiunea acesteia cu `names.size()`.

Soluție disponibilă după 3 încercări

Exercițiu#java.m4.l2.e2
Încercări: 0Se încarcă…

Declarați un ArrayList de numere întregi denumite, adăugați numărul 42 și imprimați-l regăsindu-l la indexul 0 folosind get().

Se încarcă editorul...
Afișează indiciu

Folosiți `ArrayList<Integer> numere = new ArrayList<>();` (cu clasa wrapper Integer) și imprimați-o cu `System.out.println(numbers.get(0));`.

Soluție disponibilă după 3 încercări

Exercițiu#java.m4.l2.e3
Încercări: 0Se încarcă…

Declarați un ArrayList de șiruri de culori numite. Adăugați culorile Roșu, Verde și Albastru la listă. În cele din urmă, utilizați o buclă pentru fiecare pentru a itera lista și a imprima fiecare culoare pe ecran.

Se încarcă editorul...
Afișează indiciu

Declarați lista cu `ArrayList<String> colors = new ArrayList<>();`, adăugați cele trei culori și folosiți o buclă `for (String c : colors)` pentru a le imprima folosind `System.out.println(c);`.

Soluție disponibilă după 3 încercări