CyberStars

ArrayList

Array-urile sunt utile, dar au o limitare mare: mărimea lor este fixă. Odată ce creezi un array cu 5 elemente, nu poți adăuga un al 6-lea. În programele reale, adesea nu știi de la început câte elemente vei avea. Aici intervine ArrayList

Un ArrayList este un array dinamic: crește și se micșorează după nevoie. Trebuie importat din java.util

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> echipaj = new ArrayList<String>();
        echipaj.add("Tommy Vercetti");
        echipaj.add("Lance Vance");
        echipaj.add("Phil Cassidy");

        System.out.println(echipaj);
    }
}

Ieșire

[Tommy Vercetti, Lance Vance, Phil Cassidy]

Partea <String> se numește tip generic: îi spune lui Java ce tip de elemente ține lista. ArrayList<String> înseamnă „o listă care ține String-uri." Pentru numere folosești ArrayList<Integer> sau ArrayList<Double> (nu int/double direct, Java face conversia automat)


Principalele metode

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> invitati = new ArrayList<String>();

        // add: adauga la final
        invitati.add("Tommy");
        invitati.add("Lance");
        invitati.add("Mercedes");
        invitati.add("Sonny");

        // size: cate elemente
        System.out.println("Total: " + invitati.size());

        // get: elementul de la un indice (de la 0)
        System.out.println("Primul: " + invitati.get(0));

        // remove: elimina de la un indice
        invitati.remove(3);
        System.out.println("Dupa eliminare: " + invitati);
    }
}

Ieșire

Total: 4
Primul: Tommy
Dupa eliminare: [Tommy, Lance, Mercedes]

.size() cu paranteze, nu .length ca la array-uri, e una dintre diferențele de reținut


Parcurgere cu for clasic: când ai nevoie de indice

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> echipaj = new ArrayList<String>();
        echipaj.add("Tommy Vercetti");
        echipaj.add("Lance Vance");
        echipaj.add("Phil Cassidy");

        for (int i = 0; i < echipaj.size(); i++) {
            System.out.println(i + ": " + echipaj.get(i));
        }
    }
}

Ieșire

0: Tommy Vercetti
1: Lance Vance
2: Phil Cassidy

Parcurgere cu for-each: mai curat când nu ai nevoie de indice

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> echipaj = new ArrayList<String>();
        echipaj.add("Tommy Vercetti");
        echipaj.add("Lance Vance");
        echipaj.add("Phil Cassidy");

        for (String nume : echipaj) {
            System.out.println("Membru: " + nume);
        }
    }
}

Ieșire

Membru: Tommy Vercetti
Membru: Lance Vance
Membru: Phil Cassidy

Citește for (String nume : echipaj) ca: „pentru fiecare String numit nume din echipaj"


ArrayList devine cu adevărat puternic când ții obiecte în el, nu doar String-uri sau numere, ci instanțe ale claselor tale

import java.util.ArrayList;

class Masina {
    String nume;
    int viteza;

    Masina(String nume, int viteza) {
        this.nume = nume;
        this.viteza = viteza;
    }
}

public class Main {
    public static void main(String[] args) {
        ArrayList<Masina> garaj = new ArrayList<Masina>();
        garaj.add(new Masina("Infernus", 240));
        garaj.add(new Masina("Cheetah", 230));
        garaj.add(new Masina("Banshee", 200));

        for (Masina m : garaj) {
            System.out.println(m.nume + " - " + m.viteza + " km/h");
        }
    }
}

Ieșire

Infernus - 240 km/h
Cheetah - 230 km/h
Banshee - 200 km/h

ArrayList<Masina> ține obiecte de tip Masina. Poți accesa câmpurile fiecărui obiect direct în buclă


Comparație rapidă

ArrayArrayList
MărimeFixăDinamică
Lungime.length.size()
Accesarr[i]list.get(i)
For-eachmergemerge
Adăugarenu.add()
Ștergerenu.remove()

Misiune: Lista Echipajului

Tommy ține o listă cu membrii echipei sale din Vice City. Fiecare membru are un nume și un rol. Tommy începe cu Lance Vance (șofer), Phil Cassidy (armament), Umberto Robina (aliat) și Hilary King (șofer). La un moment dat, Lance îl trădează și trebuie eliminat din listă

Construiește o clasă MembruEchipa (cu nume și rol). În main, stochează datele fiecărui membru în variabile: nume1/rol1 până la nume4/rol4 (pornește cu Lance/sofer, Phil/armament, Umberto/aliat, Hilary/sofer). Adaugă-i pe toți patru într-un ArrayList<MembruEchipa>, elimină-l pe Lance (indexul 0), apoi parcurge lista și afișează fiecare membru rămas ca "nume - rol"

Exemplu

Phil Cassidy - armament
Umberto Robina - aliat
Hilary King - sofer