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.

ArrayList (dynamický zoznam): Dátová štruktúra v Jave
ArrayList (dynamický zoznam): Dátová štruktúra v Jave

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 kolekcia – hierarchia dedičnosti (zdroj: callicoder.com/static/b5d6144ae3fbf06551c077fea6cbd0a1/9cad3/java-arraylist-hierarchy.jpg)

    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.

    7 min.Vector dátová štruktúra Java

    Java Vector: Dátová štruktúra a trieda Vector (dynamické pole) v Jave

    Predstavujeme ti Java Vector, dátovú štruktúru s konštruktormi, základnými operáciami, výhodami, nevýhodami a príkladovým kódom.

    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:

    Výstup príkladu main.java arraylist

    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.

    O autorovi

    Jozef Wagner

    Java Developer Senior

    Viac ako 10 rokov programujem v Jave, momentálne pracujem v msg life Slovakia ako Java programátor senior a pomáham zákazníkom implementovať ich požiadavky do poistného softvéru Life Factory. Vo voľnom čase si rád oddýchnem v lese, prípadne si zahrám nejakú dobrú počítačovú hru.

    Daj nám o sebe vedieť