Arrays vs Arraylists
Pole jsou nejčastěji používanou datovou strukturou pro uložení kolekce prvků. Většina programovacích jazyků poskytuje metody pro snadné deklarování polí a přístupových prvků v polích. Arraylist lze považovat za dynamické pole, které se může zvětšovat. Z tohoto důvodu nemusí programátor znát velikost arraylistu, když ji definuje.
Co jsou pole?
Na obrázku 1 je znázorněn kus kódu, který se obvykle používá k deklarování a přiřazování hodnot matici. Obrázek 2 ukazuje, jak by pole vypadalo v paměti.
int hodnoty [5]; hodnoty [0] = 100; hodnoty [1] = 101; hodnoty [2] = 102; hodnoty [3] = 103; hodnoty [4] = 104; |
Obrázek 1: Kód pro deklarování a přiřazování hodnot matici
100 | 101 | 102 | 103 | 104 |
Index: 0 | 1 | 2 | 3 | 4 |
Obrázek 2: Pole uložené v paměti
Nad kódem je definováno pole, do kterého lze uložit 5 celých čísel a je k nim přistupováno pomocí indexů 0 až 4. Jednou důležitou vlastností pole je, že celé pole je přiděleno jako jeden blok paměti a každý prvek získá svůj vlastní prostor v poli. . Jakmile je pole definováno, jeho velikost je pevná. Takže pokud si nejste jisti velikostí pole v době kompilace, budete muset definovat dostatečně velké pole, aby bylo na bezpečné straně. Ve většině případů však ve skutečnosti použijeme méně prvků, než jsme přidělili. Takže značné množství paměti je ve skutečnosti zbytečné. Na druhou stranu, pokud „dostatečně velké pole“ není ve skutečnosti dostatečně velké, program by se zhroutil.
Co jsou arraylisté?
Arraylist lze považovat za dynamické pole, které se může zvětšovat. Proto jsou arraylisté ideální pro použití v situacích, kdy neznáte velikost prvků požadovaných v době deklarace. V Javě mohou arraylisté držet pouze objekty, nemohou držet primitivní typy přímo (primitivní typy můžete vložit do objektu nebo použít třídy obalů primitivních typů). Obecně jsou arraylisté opatřeni metodami pro provádění vkládání, mazání a vyhledávání. Časová složitost přístupu k prvku je o (1), zatímco vkládání a mazání má časovou složitost o (n). V Javě mohou být arraylisté procházeni pomocí foreach smyček, iterátorů nebo jednoduše pomocí indexů.
Jaký je rozdíl mezi Arrays a Arraylists
I když jsou pole a arraylisté podobní v tom smyslu, že se oba používají k ukládání sbírek prvků, liší se v tom, jak jsou definovány. Velikost pole musí být zadána, když je pole definováno, ale můžete definovat arraylist bez znalosti skutečné velikosti. Prvky můžete přidat do arraylistu poté, co je definován, a to není možné pomocí polí. Ale v Javě nemohou arraylisté držet primitivní typy, ale pole lze použít k držení primitivních typů. Pokud však potřebujete datovou strukturu, která může měnit její velikost, nejlepší volbou bude arraylist.