V tomto úvodnom článku do série pokročilá java sa pozrieme na zúbok kolekciám. Kolekcie sú akoby kontajnery, ktoré v sebe držia ďalšie objekty. Inak môžeme kolekcie chápať aj ako zoznamy. Zoznam telefónnych čísiel. Zoznam osôb. Zoznam áut. Zoznam súborov. Zoznam čísiel ….
Pri kolekciách budeme hovoriť o Rozhraní, Implementácii a Algoritmoch.
Java collection framework – java sama o sebe poskytuje niekoľko kolekcií. Poskytuje nám ich implementácie a aj algoritmy na vyhľadávanie, vkladanie, triedenie a podobne.
Rozhriania kolekcií v tomto frameworku sú generické. Teda umožňujú do nich vkladať rôzne typy objektov. Pamätajte, že java je striktne typový jazyk a do premennej typu String proste int nedáš, musí tam ísť iba String. Ku generikám sa ešte dostaneme neskoršom článku.
 
Collection – top v hierarchii, používa sa na presun kolekcii, manipuláciu kde sa požaduje aby tam prišla akákoľvek kolekcia. Do Collection môžeš vložiť akýkoľvek typ kolekcie, ktorý rozširuje túto kolekciu.
Set – nemôže obsahovať duplicity
List – zoznam, môže obsahovať duplicity, poradie elementov je zachované pomocou indexov
Queue – FIFO – first in first out, čo príde prvé do tejto kolekcie tak z nej aj prvé odíde, niektoré implementácie majú výnimky
Deque – FIFO aj LIFO (last in first out) – elementy môžu byť vkladané aj vyberané z oboch koncov
Map – object ktorý mapuje objekty k ich kľúčom, nemôže obsahovať totožné kľúče
SortedSet a SortedMap – sú vlastne zoradené Map a Set
Implementácie (najpoužívanejšie sú zvýraznené boldom):
Set
EnumSet, HashSet, LinkedHashSet, TreeSet
List
ArrayList, LinkedList, Stack, Vector
Map
EnumMap, HashMap, LinkedHashMap, TreeMap
SortedSet
NavigableSet
TreeSet
SortedMap
NavigableMap
TreeMap
Queue
LinkedList, PriorityQueue
 
Neobsahuje duplicitné elementy – lepšie povedané nemôže obsahovať duplicitné elementy.
HashSet – neuchováva poradie v akom boli elementy vložené ale pracuje najrýchlejšie
LinkedHashSet – uchováva poradie elementov v akom boli vložené
TreeSet – poradie elementov je zoradené podľa ich hodnôt, je pomalší
 
Majme kolekciu, ktorá obsahuje elementy, ktoré sú duplicitné. Ako z nej najrýchlejšie získame kolekciu, ktorá nemá duplicity?
Funguje to tak, že z kolekcie sa vytvorí Set. A Set už z definície nemôže obsahovať duplicity.
Pridanie elementov do Setu:
Je element v kolekcii?
Odstránenie elementu z kolekcie:
Prechádzanie cez Set:
Spýtam sa či všetky elementy zo set1 sú aj v set2
Odstránim z set1 všetky zhodné elementy so set2
Všetko zo set2 pridám do set1
Uchováva poradie elementov. Elementy sú prístupné aj pomocou indexov. Je možné do už vytvoreného Listu pridať nové elementy aj na indexy ktoré sú obsadené – elementy sa posunú. Môžeme v nich vyhľadávať indexOf a lastIndexOf. Pri Listoch si musíme dávať veľký pozor na to aby sme nezhodili program kvôli prístupu k neexistujúcim elementom – respektíve k neexistujúcim indexom v Liste. Napríklad máš List so 4 elementami a chceš pristúpiť k 6temu elementu.
 
Základné pomocné algoritmy, špecifické ku List:
 
ArrayList – prispôsobuje svoju veľkosť, základné polia museli mať špecifikovanú dĺžku pri vytvorení, nemohli rásť alebo sa zmenšovať
LinkedList – iná implementácia, rozdielu sú v časových záťažiach s rôznymi operáciami nad Listami
Pridanie elementov do Listu:
Výber elementu z listu na indexy 1:
Je prázdny?
Pridaj na pozíciu 2:
Odstráň element:
Rôzne manipulácie:
Mapa obsahuje hodnoty viazané na kľuč. Takže to máme po anglicky key – value hodnoty. Kľúče musia byť unikátne.
HashMap – nedrží si poradie, náhodné usporiadanie
LinkedHashMap – drží poradie
Vloženie do Mapy:
Získame a vypíšeme hodnotu elementu s kľúčom 1:
Prechod cez elementy Mapy:
Pre zoraďovanie použijeme už existujúci algoritmus v triede Collections.sort(l). Písmeno l v tomto prípade bude List. Ak by tento List obsahoval sadu Stringov boli by zoradené abecende, ak by obsahoval Dátum tak budú zoradené chronologicky. Ako je to možné? Je to preto, lebo tieto triedy implementujú rozhranie Comparable. Ak by si sa snažil takto zoradiť také triedy, ktoré neimplementujú toto rozhranie, tak program vyhodí výnimku.
Existuje ale možnosť, že v tvojej triede implementuješ toto rozhranie. Potom toto triedenie je teraz považované za prirodzené.
Príklad: Máme Osobu, ktorá implementuje Comparable. Musíme implementovať metódu compareTo.
Čo ak chceš použiť úplne iné ako prirodzené triedenie, chceš to triediť napríklad podľa veku. Alebo chceš triediť objekty, ktoré neimplementujú Comparable rozhranie? Tak si ho vyrobíš. Na to použiješ rozhranie Comparator a potom ho požiješ Collections.sort(e, VLASTNY_ORDER);.
Dobrý článok? Chceš dostávať ďalšie?
Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.
Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.
robime.it existuje od roku 2012 s cieľom byť partnerom IT-čkárov a pomáhať im v odbornom raste.

Robíme to cez budovanie osobných vzťahov, HR službami a podpore IT komunít.

IT Blog – bloguj s nami
Vyhľadávanie pracovných príležitosti
Aktualizácia životopisu
Pohovor na skúšku
SÓLO pre freelancerov
Odporuč nám známeho
Digital footprint – Bloguj na robime.it
Pridať pracovnú ponuku
Prehľad pracovných ponúk

O nás
Kontakt
Ochrana súkromia
[email protected]

source