'En eindelijk zal ik je over Map vertellen.'

"Map slaat, zoals u weet, een set sleutel-waardeparen op. De sleutels moeten uniek zijn, maar de waarden kunnen van alles zijn. Als u een sleutel-waarde-paar toevoegt aan een kaart en de verzameling bevat de sleutel al, dan de oude waarde wordt vervangen door de nieuwe. Met andere woorden, de sleutel werkt als een speciale index die elk object kan zijn . "

Kaart is een wiskundige term die een set van (x, y) paren aangeeft, waarin elke unieke x overeenkomt met een bepaalde y.

Programmeurs zijn dol op Map, dus hier presenteren we 4 verschillende collecties die de Map-interface implementeren:

"Hier is de eenvoudige overervingsstructuur:"

Kaarthiërarchie - 1

"Het geel geeft aan dat Entry een geneste interface is in de kaartinterface ."

"Invoer is toegevoegd om een ​​elementenpaar als een enkele entiteit te beschrijven."

"Hier zijn de methoden van Map<K,V>:"

methoden Beschrijving
int size() Retourneert het aantal paren op de kaart.
boolean isEmpty() Controleert of de kaart leeg is.
boolean containsKey(Object key) Bevat de kaart de opgegeven sleutel?
boolean containsValue(Object value) Bevat de kaart de opgegeven waarde?
V get(Object key) Retourneert de waarde voor de opgegeven sleutel.
V put(K key, V value) Stelt een nieuwe waarde in voor de sleutel.
De methode retourneert de oude waarde of null
putAll(Map<? extends K, ? extends V> m) Voegt paren van een andere kaart toe.
void clear() Wist de kaart, dwz verwijdert alle paren.
Set<K>keySet() Retourneert een set sleutels.
Collection<V>values() Retourneert een verzameling waarden.
Set<Map.Entry<K, V>>entrySet() Retourneert een set paren.

"K en V zijn de typeparameters voor de sleutels en waarden."

"Nou, ik ben bekend met de meeste methoden, maar ik heb er maar met een paar gewerkt."

"Wat kun je me nog meer vertellen over de Entry-klasse?"

"Deze klasse beschrijft een paar elementen. Het heeft een paar methoden:"

methoden Beschrijving
getKey() Retourneert de sleutel van het sleutel-waardepaar.
getValue() Retourneert de waarde van het sleutel-waardepaar.
setValue(V value) Stelt een nieuwe waarde in het sleutel-waardepaar in.

"Invoer is handig, omdat je een paar aan een methode kunt doorgeven zonder de hele kaart te passeren."

"Ik zie."

"Nu ga ik de kaartimplementaties doornemen."

"De eerste is HashMap . Het gebruikt hashtabellen om elementen op te slaan. Sleutels en waarden kunnen van elk type zijn, maar ook null. De volgorde van elementen kan veranderen wanneer de verzameling verandert ."

"Elementen worden opgeslagen in een HashMap als een set groepen of emmers. De hashCode()-methode van een element bepaalt in welke emmer het valt."

"Heel grof gezegd vallen elementen met een hashcode van 1 tot 100 in de eerste bucket, die met een waarde van 101 tot 200 vallen in de tweede, enzovoort."

"Het punt van het op deze manier opslaan van elementen is dat we alle elementen in irrelevante buckets kunnen elimineren bij het zoeken naar of verwijderen van elementen."

"Ik zie."

"Er is een heel goed artikel over HashMap. Ik raad je aan het te lezen: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"De tweede collectie is LinkedHashMap . Het belangrijkste verschil met HashMap is dat het ook items opslaat als een gelinkte lijst. In een gewone HashMap is de volgorde van de elementen ongedefinieerd en kan deze in de loop van de tijd veranderen. En je kunt een iterator krijgen van een LinkedHashMap en gebruik het om door alle elementen te lopen in de volgorde waarin ze aan de LinkedHashMap zijn toegevoegd. Bovendien heeft LinkedHashMap een iterator waarmee je door alle paren kunt lopen in volgorde van laatste gebruik/activiteit."

"Er is een heel goed artikel over LinkedHashMap. Alsjeblieft: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"De derde collectie waar ik het vandaag over wil hebben, is TreeMap ."

" TreeMap houdt zijn elementen gesorteerd in oplopende volgorde. Dit wordt bereikt doordat TreeMap een uitgebalanceerde rood-zwarte boom gebruikt om elementen op te slaan."

"Hierdoor zijn de invoegtijd en zoektijd erg laag. Deze klasse is een uitstekende keuze bij het gebruik van zeer grote hoeveelheden gegevens."

"En natuurlijk hebben we een artikel over TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

'Wat heb ik je nog niet verteld?'

"WeakHashMap, maar Rishi heeft me er een paar dagen geleden over verteld."

"Wanneer was dat?"

"Toen hij het had over SoftReference, WeakReference en PhantomReference."

'Ik geloof je, gezien het feit dat je ze allemaal correct hebt genoemd. Ga dan maar lekker liggen. Tot vanavond.'

"Dag, Elly."