Arrays vs Arraylists
Pole jsou nejběžněji používanou datovou strukturou k ukládání kolekce prvků. Většina programovacích jazyků poskytuje metody pro snadnou deklaraci polí a přístup k prvkům v polích. Na seznam polí lze pohlížet jako na dynamické pole, jehož velikost může narůstat. Z tohoto důvodu programátorka nepotřebuje znát velikost seznamu polí, když jej definuje.
Co jsou pole?
Na obrázku 1 je znázorněn kus kódu, který se obvykle používá k deklaraci a přiřazení hodnot k poli. Obrázek 2 ukazuje, jak by pole vypadalo v paměti.
int values[5]; values[0]=100; values[1]=101; values[2]=102; values[3]=103; values[4]=104; |
Obrázek 1: Kód pro deklaraci a přiřazení hodnot poli
100 | 101 | 102 | 103 | 104 |
Index: 0 | 1 | 2 | 3 | 4 |
Obrázek 2: Pole uložené v paměti
Výše uvedený kód definuje pole, do kterého lze uložit 5 celých čísel a přistupuje se k nim pomocí indexů 0 až 4. Jednou z důležitých vlastností pole je, že celé pole je alokováno jako jeden blok paměti a každý prvek dostane svůj vlastní prostor v poli. Jakmile je pole definováno, jeho velikost je pevná. Pokud si tedy nejste jisti velikostí pole v době kompilace, museli byste definovat dostatečně velké pole, abyste byli na bezpečné straně. Ale většinou ve skutečnosti použijeme menší počet prvků, než jsme alokovali. Značné množství paměti je tedy ve skutečnosti promarněno. Na druhou stranu, pokud „dostatečně velké pole“není ve skutečnosti dostatečně velké, program se zhroutí.
Co jsou Arraylisty?
Seznam polí lze považovat za dynamické pole, jehož velikost může narůstat. Proto jsou seznamy polí ideální pro použití v situaci, kdy neznáte velikost prvků požadovaných v době deklarace. V Javě mohou seznamy polí obsahovat pouze objekty, nemohou přímo obsahovat primitivní typy (přimitivní typy můžete umístit do objektu nebo použít obalové třídy primitivních typů). Obecně jsou seznamy polí poskytovány s 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ě lze seznamy polí procházet pomocí smyček foreach, iterátorů nebo jednoduše pomocí indexů.
Jaký je rozdíl mezi Arrays a Arraylists
I když jsou pole a seznamy polí podobné v tom smyslu, že se oba používají k ukládání kolekcí prvků, liší se tím, jak jsou definovány. Velikost pole je třeba zadat, když je pole definováno, ale můžete definovat seznam polí, aniž byste znali skutečnou velikost. Prvky můžete přidat do seznamu polí poté, co je definován, a to u polí není možné. Ale v Javě nemohou seznamy polí obsahovat primitivní typy, ale pole lze použít k uchování primitivních typů. Ale pokud potřebujete datovou strukturu, která může měnit svou velikost, arraylist by byla nejlepší volba.