Sobes.tech
Junior — Middle

Ako je implementovaná možnosť dynamického rozširovania poľa v ArrayList a prečo do neho môžete vkladať ľubovoľný počet prvkov?

sobes.tech AI

Odpoveď od AI

ArrayList v Jave je implementovaný na základe poľa, ktoré má počiatočne pevne stanovenú veľkosť. Keď počet prvkov presiahne aktuálnu veľkosť vnútorného poľa, dôjde k jeho rozšíreniu: vytvorí sa nové pole väčšej veľkosti a všetky prvky sa do neho skopírujú.

Toto umožňuje vkladanie ľubovoľného počtu prvkov, pretože ArrayList dynamicky zväčšuje kapacitu podľa potreby.

Príklad zjednodušenej logiky rozšírenia:

private void ensureCapacity(int minCapacity) {
    if (minCapacity > elementData.length) {
        int newCapacity = elementData.length * 3 / 2 + 1;
        if (newCapacity < minCapacity) {
            newCapacity = minCapacity;
        }
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
}

Týmto spôsobom sa pri pridávaní prvkov volá ensureCapacity, a ak je aktuálne pole plné, vytvorí sa nové s väčšou veľkosťou, čo zabezpečuje dynamické rozširovanie.