Aké typy kolekcií existujú v Jave?
sobes.tech AI
Odpoveď od AI
V Jave sú hlavné typy kolekcií zastúpené v rámci J2SE Collections Framework a delia sa do troch hlavných kategórií:
- Set:
- Neusporiadané kolekcie, ktoré neobsahujú duplicity.
- Implementácie:
HashSet,LinkedHashSet,TreeSet.
- List:
- Usporiadané kolekcie, ktorých prvky sú dostupné podľa indexu. Môžu obsahovať duplicity.
- Implementácie:
ArrayList,LinkedList,Vector,Stack.
- Map:
- Ukladajú páry "kľúč-hodnota". Kľúče sú jedinečné, hodnoty nie. Prvky sú uložené bez určeného poradia (okrem
LinkedHashMapaTreeMap). - Implementácie:
HashMap,LinkedHashMap,TreeMap,Hashtable.
- Ukladajú páry "kľúč-hodnota". Kľúče sú jedinečné, hodnoty nie. Prvky sú uložené bez určeného poradia (okrem
Okrem týchto hlavných rozhraní (Set, List, Map) existujú aj menej rozšírené:
- Queue: Kolekcia určená na uchovávanie prvkov pred ich spracovaním. Obvykle funguje podľa princípu FIFO (prvý prišiel — prvý odišiel).
- Implementácie:
PriorityQueue,ArrayDeque,LinkedList.
- Implementácie:
- Deque: Dvojstranná fronta, podporujúca vkladanie a odstraňovanie prvkov z oboch koncov.
- Implementácie:
ArrayDeque,LinkedList.
- Implementácie:
Abstraktná trieda Collection je koreňovým rozhraním pre väčšinu hierarchie kolekcií (Set, List, Queue). Map neimplementuje Collection.
Príklady použitia:
// ArrayList
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Apple"); // Duplicity sú povolené
// HashSet
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // Ignoruje sa, pretože duplicity nie sú povolené
// HashMap
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Orange", 1); // Hodnoty môžu byť rovnaké
Výber konkrétnej implementácie závisí od požadovaných vlastností: potreba zachovania poradia, prípustnosť duplicít, rýchlosť prístupu a vkladania, viacvláknové prostredie a pod. Napríklad, ArrayList je vhodný pre rýchly prístup podľa indexu, LinkedList pre časté vkladanie/odstraňovanie uprostred, HashSet pre rýchle vyhľadávanie unikátnych prvkov, a HashMap pre ukladanie dát podľa kľúča.
Vector a Hashtable sú synchronizované (vláknovo bezpečné) implementácie, ale zvyčajne je vhodnejšie používať nesynchronizované verzie (ArrayList, HashMap) a zabezpečiť synchronizáciu na inom úrovni alebo využívať kolekcie z balíka java.util.concurrent. LinkedHashSet a LinkedHashMap zachovávajú poradie vkladania. TreeSet a TreeMap ukladajú prvky v zoradenom poradí.
ArrayDeque je často preferovanejšia pred Stack a LinkedList pri použití ako zásobník alebo fronta kvôli lepšiemu výkonu.
PriorityQueue organizuje prvky v súlade s ich prirodzeným poradím alebo pomocou Comparator.