1. ArrayListclasa

Astăzi vom explora ArrayListclasa. Aceasta este prima dintre mai multe clase cunoscute sub numele de colecții . În Java, colecțiile sunt un subiect atât de larg și util încât le este dedicată o întreagă căutare CodeGym.

Pentru a înțelege pe deplin cum sunt structurate colecțiile și toate nuanțele lor, trebuie să învățați mai întâi OOP, interfețe, moștenire, elementele de bază ale multithreadingului și multe altele.

Așa că astăzi ne vom familiariza cu cel mai simplu tip de colecție. Dar la un nivel suficient de profund pentru a înțelege cum să-l folosești și cum funcționează. Acum, faceți cunoștință cu ArrayListcolecția .

Povestea de fundal

Voi începe cu un mic fundal. Programatorilor chiar nu le-a plăcut un aspect al matricelor: faptul că dimensiunea lor nu poate fi modificată. Ce se întâmplă dacă trebuie să stocați încă trei elemente într-o matrice, dar există o singură celulă goală?

Singura soluție la limitările de spațiu ale unei matrice a fost să creați o matrice foarte mare pentru a găzdui toate elementele pe care ar putea avea nevoie să le stocați. Dar asta era de obicei o risipă de memorie. Dacă o matrice conținea de obicei două sau trei elemente, dar exista chiar și o șansă mică ca să fie nevoie să stocheze 100 dintre ele, atunci era necesar să se creeze o matrice cu capacitatea de a stoca 100.

Deci, cu ce au venit programatorii? Ei au scris ArrayListclasa, care a făcut aceeași muncă ca și Arrayclasa, dar a fost redimensionabilă.

Clasa ArrayList

Numele clasei ArrayListeste format din două cuvinte: Array + List. Arrayeste o matrice și Listeste o listă.

Fiecare ArrayListobiect conține o matrice obișnuită de elemente. Când citiți elemente dintr-un ArrayList, obiectul le preia din matricea sa internă. Când scrieți elemente, le scrie în matricea internă.

Clasei ArrayList îi lipsesc toate dezavantajele pe care le au tablourile. Știe cum să:

  • Stocați elemente de un anumit tip
  • Redimensionați dinamic lista
  • Adăugați elemente la sfârșitul listei
  • Inserați elemente la începutul sau la mijlocul listei
  • Eliminați elemente de oriunde în listă

Pentru mai multe detalii, vezi mai jos:


2. Crearea unui ArrayListobiect

Pentru a crea un ArrayListobiect, trebuie să scrieți cod astfel:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

Unde ArrayListeste tipul/clasa de colecție, TypeParametereste tipul elementelor stocate în ArrayListcolecție și nameeste numele unei ArrayList<TypeParameter>variabile.

Variabila nameare un tip generic. Se compune din două tipuri: mai întâi se indică tipul colecției, apoi se folosesc paranteze unghiulare pentru a indica tipul elementelor stocate în colecție.

Exemple:

Cod Descriere
ArrayList<Integer> list = new ArrayList<Integer>();
Lista numerelor întregi
ArrayList<String> list = new ArrayList<String>();
Lista de șiruri
ArrayList<Double> list = new ArrayList<Double>();
Lista numerelor reale

Spre deosebire de matrice, colecțiile nu pot stoca tipuri primitive, ci doar tipuri de referință . Deci, dacă aveți nevoie de o colecție de ints, utilizați Integerîn schimb clasa wrapper.


3. Operații cu anArrayList

Inițial, lungimea listei nou create este zero, deoarece conține 0 elemente. Dacă adăugați un element în listă, lungimea acestuia crește cu 1. Dacă eliminați elementul adăugat, lungimea scade înapoi la zero.

Următorul tabel vă poate învăța mai multe despre metodele clasei ArrayList:

Metode Descriere
void add(Type value)
Adaugă elementul transmis în listă
void add(int index, Type value)
Adaugă un element la o anumită locație din listă.
Type get(int index)
Returnează elementul al cărui index esteindex
void set(int index, Type value)
Atribuie valueelementului al cărui index esteindex
Type remove(int index)
Îndepărtează elementul al cărui index este index. Returnează elementul eliminat.
Type remove(Type value)
Elimină elementul pe care îl treceți la metodă. Dacă există mai mult de un astfel de element, primul va fi eliminat.
void clear()
Șterge lista, adică elimină toate elementele din listă.
boolean contains(Type value)
Verifică dacă lista conține value.
boolean isEmpty()
Verifică dacă lista este goală sau nu. Cu alte cuvinte, dacă lungimea listei este zero.
int size()
Returnează dimensiunea listei, adică numărul de elemente din listă.
Type[] toArray(Type[] array)
Returnează o matrice care conține elementele listei.
Trebuie să treceți matricea la metodă.

Aceste metode vă permit să faceți aproape orice doriți cu lista: schimbați elemente, adăugați elemente și eliminați elemente. Puteți șterge lista cu o singură comandă sau chiar puteți converti lista într-o matrice.



4. Comparația ArrayListșiArray

Nu cred că putem evita compararea ArrayListși o matrice.

Există doar 4 acțiuni pe care le puteți efectua cu matrice:

  • Creați o matrice
  • Obțineți un element după index
  • Setați un element după index
  • Obțineți lungimea matricei

Iată aceste operații, așa cum se aplică unei matrice și unui ArrayList:

Matrice ArrayList
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

Să comparăm cum ArrayListfuncționează o matrice față de modul în care funcționează o matrice. De exemplu, să implementăm această sarcină: „citiți 10 șiruri de caractere de la tastatură și afișați-le pe ecran în ordine inversă”

Folosind Array Folosind ArrayList
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

Analogia este clară. Totul este cumva mai scurt și mai clar pentru matrice. Dar ArrayListnici nu este dificil: pentru a obține un element, folosim get()metoda; a schimba un element, set()metoda; pentru a obține lungimea listei, size()metoda.

Deci, de ce folosesc programatorii ArrayListclasa?

Ideea, desigur, sunt toate celelalte metode pe care tablourile obișnuite nu le au:

  • Adăugați un element în listă
  • Adăugați un element la mijlocul listei
  • Găsiți un element în listă
  • Eliminarea unui element dintr-o listă