Typy kolekcí (List, Set, Map)
Proč to potřebuji?
Kolekce jsou základním nástrojem pro práci se skupinami objektů v Javě. Správná volba typu kolekce (List, Set nebo Map) zásadně ovlivňuje výkon i přehlednost kódu.
Teorie
| Kolekce | Pořadí | Duplikáty | Přístup | Hlavní implementace |
|---|---|---|---|---|
List | zachováno | ano | index | ArrayList, LinkedList |
Set | ne* | ne | iterace | HashSet, TreeSet, LinkedHashSet |
Map | ne* | klíče ne | klíč | HashMap, TreeMap, LinkedHashMap |
* TreeSet/TreeMap = seřazeno, LinkedHashSet/LinkedHashMap = pořadí vložení.
Příklady
import java.util.*;
// === LIST – uspořádaný seznam s duplikáty ===
List<String> seznam = new ArrayList<>();
seznam.add("jablko");
seznam.add("banán");
seznam.add("jablko"); // duplikát OK
String prvni = seznam.get(0); // přístup přes index
seznam.remove(1); // odebrat podle indexu
System.out.println(seznam); // [jablko, jablko]
// === SET – množina bez duplikátů ===
Set<String> mnozina = new HashSet<>();
mnozina.add("jablko");
mnozina.add("banán");
mnozina.add("jablko"); // ignorováno – už existuje
System.out.println(mnozina.size()); // 2
System.out.println(mnozina.contains("banán")); // true
// TreeSet – seřazená množina
Set<Integer> serazena = new TreeSet<>(Set.of(5, 3, 8, 1));
System.out.println(serazena); // [1, 3, 5, 8]
// === MAP – klíč → hodnota ===
Map<String, Integer> vek = new HashMap<>();
vek.put("Jan", 25);
vek.put("Eva", 22);
vek.put("Jan", 26); // přepíše předchozí hodnotu pro klíč "Jan"
int janVek = vek.get("Jan"); // 26
boolean existuje = vek.containsKey("Eva"); // true
vek.getOrDefault("Petr", 0); // 0 (klíč neexistuje)
// Iterace přes mapu
for (Map.Entry<String, Integer> entry : vek.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}
// Kdy co použít:
// List – potřebuji pořadí, přístup přes index, duplikáty OK
// Set – potřebuji unikátnost, rychlé contains()
// Map – potřebuji vyhledávat podle klíče
Shrnutí
Klíčové body
List= pořadí + index + duplikáty,Set= unikátnost,Map= klíč→hodnotaArrayList– rychlý přístup,LinkedList– rychlé vkládání/mazáníHashSet/HashMap– O(1) přístup,TreeSet/TreeMap– O(log n) seřazeno- Pro správné fungování v
Set/Mapmusí třída implementovatequals()ahashCode()