ArrayList
Java pune la dispoziție o clasă din pachetul java.util
care, spre deosebire de array-ul classic, își poate modifica dinamic dimensiunea. Elementele dintr-un ArrayList sunt indexate asemenea unui array, fiind 0-based. Într-un ArrayList se pot adăuga elemente, sau scoate, fără a fi nevoie să creăm un ArrayList nou.
Un ArrayList nu poate retine tipuri de date primite. Daca vrem sa salvam numere, caractere sau alte tipuri primitive in acesta, pentru fiecare avem o clasa analoaga de tip wrapper: Integer, Character, Double, etc.
Pentru a putea retine valori intr-un ArrayList, putem folosi si sintaxa de tip generic.
ArrayList<Integer> lista = new ArrayList<Integer>(); // s-a creat un ArrayList care nu are nici un element. lista.size(); // returnează numărul de elemente. În acest caz =0.
Metode uzuale
//adaugarea de elemente lista.add(15); //pe poziția 0 lista.add(40); //pe pozitia 1 lista.add(80); // pe pozitia 2 lista.add(22); //pe pozitia 3 // adauga un element la un anumit index lista.set(3, 64); //vizualizarea unui anumit element, pe baza indexului: System.out.println(lista.get(3)); // elementul de pe pozitia 3 //vizualizarea tuturor elementelor: System.out.println(lista); //șterge toate elementele din listă lista.clear();
ArrayList<String> lista = new ArrayList<String>(); // se pot adauga doar elemente de tip String // Obtinerea unui element de pe o anumita pozitie: String comp = lista.get(4); // returnarea primei pozitii în care se găsește un element int index = lista.indexOf(sir1); // returnarea ultimei pozitii in care se gaseste un element int index = lista.lastIndexOf(sir1); // verifica daca un element dat se gaseste in lista System.out.println(lista.contains(sir1)); //stergerea unui element String stringDeLaIndex3 = lista.remove(3); // sterge elementul de pe pozitia 3 din ArrayList și îl returnează boolean amSters = lista.remove(sir1); // sterge prima aparitie a elementului sir1 daca exista si returneaza true sau false
Exerciţii
Se considera mai multe avioane reprezentate sub forma de String.
1. Creați o listă (ArrrayList) de avioane folosind variabile pe stack.
2. Afișați avionul de pe indexul 3.
3. Înlocuiţi un avion cu altul nou.
4. Verificați dacă lista de avioane conține un anumit avion.
5. Afișați indexul unui avion.
6. Ștergeți un avion după index.
7. Ştergeți un avion.
Iterare
Un ArrayList se poate itera în cu o buclă for sau o buclă for-each.
Exemple:
for classic:
for (int i = 0; i<lista.size(); i++){ if (lista.get(i).getMarca().equals(“Acer”)){ lista.remove(i); } }
for-each:
for (Computer computer : lista) { if (computer.getMarca().equals(“Toshiba”)){ lista.remove(computer); } }
Exerciţii
1. Creaţi un ArrayList care reţine valori de tipul Integer. Adăugaţi în acesta 10 copii ale numărului -113. Afişaţi conţinutul acestuia pe ecran.
Nu folosiţi o buclă şi nici o variabilă pentru index. Va trebui să vă folosiţi de numere literali pentru a face referire la fiecare poziţie.
2. Creaţi un ArrayList care reţine valori de tipul Integer. Adăugaţi în acesta 10 copii ale numărului -113 şi afişaţi conţinutul acestuia pe ecran.
De data aceasta, folosiţi o buclă pentru a umple array-ul cu valori şi apoi pentru a-l afişa. De asemenea, în condiţia de la buclă, nu număraţi până la un număr literal, ci va trebui să folosiţi metoda size()
din ArrayList.
3. Creaţi un ArrayList care să reţină valori de tipul Integer. Adăugaţi în acesta 10 numere aleatoare, cu valori între 1 şi 100. Apoi afişaţi conţinutul acestui ArrayList. Folosiţi o buclă pentru a genera valori. Pentru afişare puteţi folosi metodă simplă, fără buclă:
System.out.println("ArrayList: " + whateverYourArrayListVariableIsCalled);
4. Creaţi un ArrayList care să reţină valori de tipul Integer. Populaţi lista cu 1,000 de valori aleatoare, fiecare între 10 şi 99. Apoi afişaţi conţinutul acestui ArrayList pe ecran cu o modalitate preferată.
5. Copierea unui ArrayList.
Scrieţi un program care să creeze un ArrayList ce conţine valori de tipul Integer. Puneţi 10 numere aleatoare în acesta între 1 şi 100. Acesta ar trebui să copieze toate elementele din primul ArrayList într-un alt ArrayList de aceeaşi dimensiune. Afişaţi apoi valorile din cei doi ArrayList folosind modalitatea dorită.
6. Căutarea unei valori într-un ArrayList.
Creaţi un ArrayList care reţine valori de tipul Integer şi populaţi-l cu valori aleatoare între 1 şi 50. Afişaţi aceste valori pe ecran, apoi cereţi utilizatorului să introducă un număr întreg. Apoi căutaţi în ArrayList numărul introdus:
- dacă numărul se află în listă, afişaţi un mesaj; dacă găsiţi de mai multe ori numărul respectiv, nu este nicio problemă dacă mesajul va fi afişat de mai multe ori.
- nu afişaţi un mesaj dacă valoarea nu a fost găsită.
Discussion
In the exercise Nr 6.
Would it be better to check if the ArrayList contains the number we are looking for before starting to look at every element of the arrayList with the for statement?
Is the contains method of arrayList more efficient than the for|enhanced for? Or it doesn't make a difference?
The purpose of the exercise is to create an algorithm which finds a number in an ArrayList. You can just use the "contains" method or others and it will automatically find it for you.