Sobes.tech
Junior

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í:

  1. Set:
    • Neusporiadané kolekcie, ktoré neobsahujú duplicity.
    • Implementácie: HashSet, LinkedHashSet, TreeSet.
  2. List:
    • Usporiadané kolekcie, ktorých prvky sú dostupné podľa indexu. Môžu obsahovať duplicity.
    • Implementácie: ArrayList, LinkedList, Vector, Stack.
  3. Map:
    • Ukladajú páry "kľúč-hodnota". Kľúče sú jedinečné, hodnoty nie. Prvky sú uložené bez určeného poradia (okrem LinkedHashMap a TreeMap).
    • Implementácie: HashMap, LinkedHashMap, TreeMap, Hashtable.

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.
  • Deque: Dvojstranná fronta, podporujúca vkladanie a odstraňovanie prvkov z oboch koncov.
    • Implementácie: ArrayDeque, LinkedList.

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.