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

KolekcePořadíDuplikátyPřístupHlavní implementace
ListzachovánoanoindexArrayList, LinkedList
Setne*neiteraceHashSet, TreeSet, LinkedHashSet
Mapne*klíče neklíč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íč→hodnota
  • ArrayList – 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/Map musí třída implementovat equals() a hashCode()