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<E> -
implementuje rozhraní
Map<K,V>-
K = objektový typ klíče, V = objektový typ hodnoty
-
např. mapa ID a osob —
Map<Long, Person>
-
Příklad Map
Následující mapa ukládá značky aut (klíče) a počty kusů (hodnoty):
Map<String, Integer> 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 (nebonull) -
V replace(K key, V value)— nahradí existující klíč hodnotou
|
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<K> keySet()-
vrací množinu všech klíčů
-
Proč množina? Každý klíč je v mapě maximálně jednou
-
-
Collection<V> values()-
vrací kolekci všech hodnot (může obsahovat duplicity)
-
-
Set<Map.Entry<K,V>> entrySet()-
vrací množinu typu
Map.Entrypro iteraci kolekce -
obsahuje metody
getKey(), getValue()
-
Pro vkládání mapy do mapy existuje putAll.
|
Příklad iterace mapy
Map<Integer, String> map = Map.ofEntries(
entry(1, "a"),
entry(2, "b")
);
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("key: " + entry.getKey());
System.out.println("value: " + entry.getValue());
}
Implementace mapy — HashMap
-
HashMapje 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".
|