Co je ArrayList?
ArrayList v počítačovém programování je datová struktura, která se chová jako počítačové pole, ale také implementuje schopnost dynamicky rozšiřovat velikost pole podle potřeby. Na rozdíl od vlastního datového typu pole, který nelze během provádění programu změnit, struktura ArrayList může růst a zmenšit velikost pole v reakci na přidání nebo odstranění prvků. Má velmi příznivý výkonnostní profil, který umožňuje rychlý náhodný přístup ke sběru dat. Existují však dva případy, kdy je pomalejší než některé jiné datové struktury, a to přidání a odebrání prvků ze středu pole. Většina objektově orientovaných programovacích jazyků má nějaký typ implementace takového seznamu, i když se někdy nazývá dynamická pole.
Použití ArrayList poskytuje program se schopností okamžitého přístupu k datovým objektům s indexovým číslem místo toho, aby museli procházet celou sekvencí dat a hledat adresu, která je vyžadována u propojených seznamů. Se schopností zvětšit velikost pole podle potřeby je to velmi vyvážený přístup, který zvažuje flexibilitu i rychlost. Navíc, když jsou prvky z takového seznamu odstraněny, zmenší se velikost pole, čímž se uvolní místo v paměti.
Jednou z výhod použití ArrayListu v některých jiných datových strukturách je to, že obálka objekt nemusí obsahovat uložená data. V případě propojeného seznamu nebo hashovací tabulky je obvykle zapotřebí samostatný objekt, aby se zachovala technika používaná k držení a manipulaci se sbírkou. U ArrayListu je jedinou potřebnou informací o datových objektech adresa objektu v paměti. To znamená, že při práci s tímto typem seznamu bude méně režijní paměti.
Potenciální problém s používáním ArrayList může pocházet ze systému implementace a správy paměti. Většina polí je přidělena jako po sobě jdoucí paměťová místa. Aby bylo možné použít ArrayList určité velikosti, musí být v nepřetržité sekvenci bloků k dispozici alespoň tolik paměti. Dynamické pole by se mohlo několikrát změnit velikost, takže může dojít k fragmentaci paměti a vést k selhání alokace paměti, čímž se zastaví provádění programu.
Výkon pole ArrayList je podobný výkonu použití standardního pole, ačkoli časy přístupu jsou mírně pomalejší, protože pole je zapouzdřeno v objektu. Jedním příkladem, ve kterém se dynamické pole může dramaticky zpomalit v závislosti na implementaci, je situace, kdy je třeba změnit velikost pole. To může zahrnovat kopírování aktuálního pole do nového pole, které bylo přiděleno na novou požadovanou velikost, což způsobí dočasné snížení výkonu. Stejný problém může nastat při přidávání nebo odebírání prvku ze středu seznamu, což způsobuje, že všechny následující prvky musí být přesunuty do nového umístění.