ArrayList (dynamický zoznam): Dátová štruktúra array list v Jave
Java ArrayList je dátová štruktúra, ktorá ti výrazne zjednoduší prácu s poľami. Na rozdiel od klasických polí umožňuje dynamicky meniť svoju veľkosť a ponúka celý rad praktických metód pre pridávanie, mazanie či vyhľadávanie prvkov. V článku sa pozrieme na to, ako ArrayList funguje, aké má výhody a obmedzenia, a v akých situáciách ti najlepšie poslúži.

V článku sa dozvieš:
Pojem array list označuje všeobecný typ dátovej štruktúry – dynamický zoznam založený na poli. V Jave ho reprezentuje trieda ArrayList, ktorá ponúka množstvo užitočných metód. Táto kolekcia reprezentuje dynamické pole objektov a umožňuje zmenu svojej veľkosti podľa potreby aplikácie.

ArrayList kolekcia – hierarchia dedičnosti (zdroj: callicoder.com/static/b5d6144ae3fbf06551c077fea6cbd0a1/9cad3/java-arraylist-hierarchy.jpg)
ArrayList v Java – predstavenie dátovej štruktúry
ArrayList kolekcia uľahčuje prácu so statickými poliami v Jave. Tie majú preddefinovanú fixnú veľkosť, ktorú treba stanoviť pri ich vytvorení. Ak je potrebné uložiť viac prvkov, než umožňuje kapacita poľa, programátor musí vytvoriť nové pole, skopírovať doň prvky a staré pole odstrániť.
Kolekcia ArrayList tento proces zjednodušuje a automatizuje. Jej hlavnou vlastnosťou je dynamická zmena veľkosti, pričom pri prekročení kapacity sa automaticky zväčší o 50 % aktuálnej kapacity poľa. Bola predstavená v Jave 1.2 ako súčasť balíka java.util. Na rozdiel od Java Vector nie je synchronizovaná, čo znamená, že umožňuje rýchlejšie operácie, no je potrebné ju manuálne synchronizovať v prípade viacvláknového prostredia.
ArrayList – konštruktory
Na vytvorenie inštancie ArrayList môžeme použiť jeden z nasledujúcich konštruktorov:
1. Prázdny ArrayList
Vytvorí prázdny ArrayList s počiatočnou kapacitou 10.
ArrayList<String> list = new ArrayList<>();
2. ArrayList s počiatočnou kapacitou
Umožňuje definovať počiatočnú kapacitu.
ArrayList<String> list = new ArrayList<>(20);
3. ArrayList skonštruovaný z kolekcie
Inicializuje ArrayList prvkami z danej kolekcie.
List<String> fruits = List.of("Apple", "Banana");
ArrayList<String> list = new ArrayList<>(fruits);
ArrayList – základné operácie
K základným operáciám s ArrayList patria:
- Pridávanie prvkov
– Jednotlivo pomocou add()
– Hromadne pomocou addAll() - Aktualizácia prvkov
Pomocou metódy set() môžeme nahradiť prvok na určitom indexe. - Odstraňovanie prvkov
Pomocou remove() podľa indexu alebo hodnoty.
Odstránenie všetkých prvkov pomocou clear(). - Prístup k prvkom
Použitie metódy get() na získanie prvku podľa indexu. - Prechádzanie cez prvky
Pomocou cyklov for, for-each, alebo cez Iterator. - Hľadanie prvkov
Metódy contains() a indexOf() umožňujú vyhľadávať konkrétne hodnoty. - Zotriedenie prvkov
Použitie metódy sort() so zadaným porovnávačom (Comparator).
Dokumentácia k Java ArrayList
Kompletný prehľad metód triedy ArrayList nájdeš v oficiálnej dokumentácii:
Java ArrayList – výhody a nevýhody
Výhody ArrayList
- Dynamická zmena veľkosti bez manuálnej správy polí.
- Vyšší výkon v porovnaní s triedou Vector, pretože nie je synchronizovaný.
- Poskytuje jednoduchý spôsob iterácie cez prvky (napr. pomocou for-each cyklu).
Nevýhody ArrayList
- Nie je synchronizovaný, čo môže byť problém vo viacvláknových aplikáciách.
- Kapacita sa automaticky zvýši o 50 % pri prekročení aktuálnej, čo môže byť náročné na pamäť.
ArrayList – kedy ju použiť a kedy nie
ArrayList je ideálna v nasledovných prípadoch:
- Ak potrebujeme dynamickú kolekciu na ukladanie veľkého počtu prvkov bez nutnosti definovať ich počiatočný počet.
- Nepotrebujeme synchronizáciu alebo sme schopní synchronizáciu zabezpečiť manuálne.
- Vyžadujeme efektívne operácie čítania a pridávania prvkov.
Naopak, nie je vhodná, ak:
- Potrebujeme synchronizovanú kolekciu. V takom prípade radšej použi Vector alebo synchronizedList().
- Často vykonávame operácie pridávania a odstraňovania prvkov na začiatku alebo v strede kolekcie (pre tieto prípady je vhodnejší LinkedList).
Príklad použitia ArrayList v Jave
Nasledujúci program demonštruje manipuláciu s dynamickým zoznamom ArrayList pri tvorbe nákupného zoznamu do obchodu:
Main.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class Main {
public static void main(String[] args) {
ArrayList<String> shoppingList = new ArrayList<>();
// Add some items to the shoppingList
shoppingList.add("Bread");
shoppingList.addAll(List.of("Milk", "Chocolate"));
shoppingList.addLast("Butter");
// Traversing elements using Iterator
System.out.println("Shopping list:");
Iterator it = shoppingList.iterator();
while (it.hasNext())
System.out.println(it.next());
System.out.println();
// Adding a new food to a specific index
shoppingList.add(1, "Potatoes");
System.out.println("Updated shopping list: ");
System.out.println(shoppingList);
// Remove chocolate
shoppingList.remove("Chocolate");
System.out.println("After removing chocolate:");
System.out.println(shoppingList);
// Sort finished shoppint list
Collections.sort(shoppingList);
System.out.println("Sorted shopping list: ");
System.out.println(shoppingList);
// Search item butter
String search = "Butter";
if (shoppingList.contains(search)) {
System.out.println("Item '" + search + "' is at index " + shoppingList.indexOf(search) + " in the shopping list.");
} else {
System.out.println("Item '" + search + "' is not in the shopping list");
}
}
}
Výstup z tohto príkladu je:
Pripravili sme pre teba súbory so spomínaným príkladom vo forme kódu, ktorý si môžeš spustiť priamo v Jave. Stiahni si Java kód pre ArrayList tu.