Mapy
Map
Asociativní pole, mapa, slovník
• ukládá dvojici klíč — hodnota
• umožnuje rychlé vyhledání hodnoty podle klíče
• klíče v mapě jsou vždy unikátní
• mapa je kontejner — dynamická datová struktura
• mapa rozhodně není Collection
• implementuje rozhraní Map
◦ K = objektový typ klíče, V = objektový typ hodnoty
◦ např. mapa ID a osob — Map
Příklad Map
Následující mapa ukládá značky aut (klíče) a počty kusů (hodnoty):
Map vehicles = new HashMap<>();
vehicles.put("BMW", 2);
vehicles.put("Audi", 4);
vehicles.put("Opel", 1);
vehicles.get("BMW"); // 2
Metody Map I
• int size() — velikost mapy
• void clear() — vyprázdní mapu
• boolean isEmpty() — true, když je mapa prázdná
• boolean containsKey(Object key) — dotaz na přítomnost klíče
• boolean containsValue(Object value) — dotaz na přítomnost hodnoty
• V remove(Object key) — odstraní klíč, vrací hodnotu (nebo null)
• V replace(K key, V value) — nahradí existující klíč hodnotou
1
K = objektový typ klíče (key)
V = objektový typ hodnoty (value)
Metody Map II
• V put(K key, V value)
◦ vloží dvojici klíč — hodnota do mapy
◦ jestli daný klíč už existuje, hodnota je přepsána
◦ vrací přepsanou hodnotu nebo null
• V putIfAbsent(K key, V value)
◦ vloží dvojici pouze v případe, že klíč zatím v mapě neexistuje
• V get(Object key)
◦ výběr hodnoty odpovídající zadanému klíči
◦ jestli klíč neexistuje, vrací null
• V getOrDefault(Object key, V defaultValue)
◦ vrací hodnotu daného klíče nebo defaultní hodnotu
Metody Map III
• Set keySet()
◦ vrací množinu všech klíčů
◦ Proč množina? Každý klíč je v mapě maximálně jednou
• Collection values()
◦ vrací kolekci všech hodnot (může obsahovat duplicity)
• Set> entrySet()
◦ vrací množinu typu Map.Entry pro iteraci kolekce
◦ obsahuje metody getKey(), getValue()
Pro vkládání mapy do mapy existuje putAll.
Příklad iterace mapy
2
Map map = Map.ofEntries(
entry(1, "a"),
entry(2, "b")
);
for (Map.Entry entry : map.entrySet()) {
System.out.println("key: " + entry.getKey());
System.out.println("value: " + entry.getValue());
}
Implementace mapy — HashMap
• HashMap je implementována pomocí hašovací tabulky
• haš je zahašovaný klíč, hodnota tabulky je dvojice (klíč, hodnota)
• Složitost základních operací
◦ v praxi závisí na kvalitě hašovací funkce (metody hashCode) na ukládáných objektech
◦ teoreticky se blíží složitosti konstantní
Kolekce HashSet je implementována pomocí HashMap — klíč je prvek, hodnota je
"dummy object".
Javadoc třídy HashMap
3