# Kolekce v Javě Java poskytuje knihovní třídy pro základní implementaci kolekcí ### Třída `LinkedList` - spojová datová struktura **Operace** - operace v $\mathcal O(1)$ - `void addFirst(T)`, `void addLast(T)` - `T getFirst()`, `T getLast()` - `void removeFirst()`, `void removeLast()` - operace v $\Omega(n)$ - `void add(int, T)` - vložení na daný index - `T get(int)` - získání z indexu - `void remove(int)` - smazání z indexu - `Iterator iterator()` - `ListIterator listIterator()` - lepší iterátor ### Třída `ArrayList` - dynamické pole **Operace** - operace v $\mathcal O(1)$ - `void add(T)` - `T get(int)` - operace v $\Omega(n)$ - `void remove(int)` - operace pro získání iterátorů - ale s **vyšší složitostí**! ### Třída `Iterator` **Operace** - `T next()` - vrátí přeskočený prvek a posune se dopředu - na konci vyhodí výjimku - `boolean hasNext()` - existence dalšího prvku - `void remove()` - odstraní poslední prvek vrácený metodou `next()` - před dalším odstraněním potřeba zavolat `next()` - chybí: - návrat na začátek (stačí si vyžádat nový iterátor) - metoda pro vložení prvku **Vylepšený `ListIterator`** - má navíc: - `T previous()` - vrátí hodnotu předchozího prvku a posune iterátor zpět - na začátku vyhodí výjimku - `void add(T)` - vloží prvek na pozici iterátoru ### Rozhraní `Queue` - rozhraní fronty - `LinkedList` toto rozhraní implementuje **Operace** - `void add()` - `T element()` - `T remove()` ### Třída `Stack` implementace zásobníku dynamickým polem - `ArrayList` - stejné metody poskytuje i `LinkedList` **Operace** - `void push(T)` - `T pop()` - `T peek()` ### Obecná zásada Kolekce v čase $\mathcal O(1)$ umí buď 1) vybrat prvek na specifickém indexu, anebo 2) vyjmout/vložit prvek na pozici iterátoru, ale nikdy ne obojí současně! Najít i-tý prvek ve spojovém seznamu zabere vždy $\Omega(n)$.