"Og langt om længe skal jeg fortælle dig om Map."
"Map gemmer som bekendt et sæt nøgle-værdi-par. Nøglerne skal være unikke, men værdierne kan være hvad som helst. Hvis du tilføjer et nøgle-værdi-par til et kort, og samlingen allerede indeholder nøglen, så den gamle værdi vil blive erstattet med den nye. Med andre ord fungerer nøglen som et specielt indeks, der kan være et hvilket som helst objekt ."
Kort er et matematisk udtryk, der betegner et sæt af (x, y) par, hvor hvert unikt x svarer til et eller andet y.
Programmører er meget glade for Map, så her præsenterer vi 4 forskellige samlinger, der implementerer Map-grænsefladen:
"Her er dens enkle arvestruktur:"
"Det gule indikerer, at Entry er en indlejret grænseflade i kortgrænsefladen ."
"Entry blev tilføjet for at beskrive et elementpar som en enkelt enhed."
"Her er metoderne til Map<K,V>:"
Metoder | Beskrivelse |
---|---|
int size() |
Returnerer antallet af par på kortet. |
boolean isEmpty() |
Tjek om kortet er tomt. |
boolean containsKey(Object key) |
Indeholder kortet den angivne nøgle? |
boolean containsValue(Object value) |
Indeholder kortet den angivne værdi? |
V get(Object key) |
Returnerer værdien for den angivne nøgle. |
V put(K key, V value) |
Indstiller en ny værdi for nøglen. Metoden returnerer den gamle værdi eller null |
putAll(Map<? extends K, ? extends V> m) |
Tilføjer par fra et andet kort. |
void clear() |
Rydder kortet, dvs. fjerner alle par. |
Set<K>keySet() |
Returnerer et sæt nøgler. |
Collection<V>values() |
Returnerer en samling af værdier. |
Set<Map.Entry<K, V>>entrySet() |
Returnerer et sæt par. |
"K og V er typeparametrene for nøglerne og værdierne."
"Jamen, jeg kender de fleste af metoderne, men jeg har kun arbejdet med nogle af dem."
"Hvad kan du ellers fortælle mig om indgangsklassen?"
"Denne klasse beskriver et par elementer. Den har et par metoder:"
Metoder | Beskrivelse |
---|---|
K getKey() |
Returnerer nøglen til nøgleværdi-parret. |
V getValue() |
Returnerer værdien af nøgleværdi-parret. |
V setValue(V value) |
Indstiller en ny værdi i nøgleværdi-parret. |
"Entry er praktisk, fordi du kan sende et par til en metode uden at passere hele kortet."
"Jeg ser."
"Nu vil jeg gennemgå kortimplementeringer."
"Først ud er HashMap . Det bruger hashtabeller til at gemme elementer. Nøgler og værdier kan være af enhver type, såvel som nul. Elementernes rækkefølge kan ændre sig, når samlingen ændres ."
"Elementer gemmes i et HashMap som et sæt grupper eller buckets. Et elements hashCode()-metode bestemmer, hvilken bucket det falder ind i."
"Meget groft sagt falder elementer med en hash-kode fra 1 til 100 i den første bøtte, dem med en værdi fra 101 til 200 falder i den anden, og så videre."
"Pointen med at opbevare elementer på denne måde er, at vi kan eliminere alle elementer i irrelevante spande, når vi søger efter eller fjerner elementer."
"Jeg ser."
"Der er en rigtig god artikel om HashMap. Jeg anbefaler, at du læser den: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "
"Den anden samling er LinkedHashMap . Dens væsentligste forskel fra HashMap er, at den også gemmer elementer som en linket liste. I et almindeligt HashMap er rækkefølgen af elementerne udefineret og kan ændre sig over tid. Og du kan få en iterator fra en LinkedHashMap og brug den til at gå gennem alle elementerne i den rækkefølge, de blev tilføjet til LinkedHashMap. Derudover har LinkedHashMap en iterator, der lader dig gå gennem alle par i rækkefølge efter sidste brug/aktivitet."
"Der er en rigtig god artikel om LinkedHashMap. Her går du: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "
"Den tredje samling, jeg gerne vil tale om i dag, er TreeMap ."
" TreeMap holder sine elementer sorteret i stigende rækkefølge. Dette opnås på grund af det faktum, at TreeMap bruger et balanceret rød-sort træ til at gemme elementer."
"Som et resultat er indsættelsestid og søgetid meget lav. Denne klasse er et godt valg, når du bruger meget store mængder data."
"Og selvfølgelig har vi en artikel om TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "
"Hvad har jeg ikke fortalt dig om endnu?"
"WeakHashMap, men Rishi fortalte mig om det for et par dage siden."
"Hvornår var det?"
"Da han talte om SoftReference, WeakReference og PhantomReference."
"Jeg tror på dig, i betragtning af at du navngav dem alle rigtigt. Så slap af. Vi ses i aften."
"Hej, Ellie."
GO TO FULL VERSION