Arrays vs Arraylists
Pole jsou nejběžněji používanou datovou strukturou k uložení kolekce prvků. Většina programovacích jazyků poskytuje metody pro snadné deklarace polí a přístup k prvkům v polích. Arraylist lze chápat jako dynamické pole, které může růst. Z tohoto důvodu programátor nepotřebuje znát velikost pole, když jej definuje.
Co jsou to pole?
Na obrázku 1 je ukázka 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.
hodnoty [0] = 100; hodnoty [1] = 101; hodnoty [2] = 102; hodnoty [3] = 103; hodnoty [4] = 104; |
Obrázek 1: Kód pro deklaraci a přiřazení hodnot k poli
100 | 101 | 102 | 103 | 104 |
Rejstřík: 0 | 1 | 2 | 3 | 4 |
Obrázek 2: Pole uložené v paměti
Nad kódem definuje pole, které dokáže 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 to, že celé pole je přiděleno jako jeden blok paměti a každý prvek má v poli svůj vlastní prostor. 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, abyste byli na bezpečné straně. Většinou ale ve skutečnosti použijeme menší počet prvků, než kolik jsme přidělili. Značná část paměti je tedy skutečně zbytečná. Na druhou stranu, pokud „dostatečně velké pole“není ve skutečnosti dostatečně velké, program by selhal.
Co jsou to seznamy?
Arraylist lze chápat jako dynamické pole, které může růst. Proto jsou seznamy polí ideální pro použití v situacích, kdy neznáte velikost prvků požadovaných v době deklarace. V Javě mohou seznamy polí obsahovat pouze objekty, nemohou přímo držet primitivní typy (primitivní typy můžete vložit do objektu nebo použít obálkové třídy primitivních typů). Obecně jsou seznamy polí poskytovány s metodami 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 poli a seznamy polí
I když jsou pole a seznamy polí podobné v tom smyslu, že se obě používají k ukládání kolekcí prvků, liší se v tom, jak jsou definovány. Velikost pole je třeba zadat, když je pole definováno, ale můžete definovat seznam polí, aniž byste věděli skutečnou velikost. Prvky můžete přidat do seznamu polí poté, co je definován, a u polí to není možné. Ale v Javě nemohou arraylisty obsahovat primitivní typy, ale k držení primitivních typů lze použít pole. Pokud však potřebujete datovou strukturu, která se může lišit její velikostí, nejlepší volbou by byl arraylist.