"Och äntligen ska jag berätta om Map."

"Map, som du vet, lagrar en uppsättning nyckel-värde-par. Nycklarna måste vara unika, men värdena kan vara vad som helst. Om du lägger till ett nyckel-värde-par till en karta, och samlingen redan innehåller nyckeln, då det gamla värdet kommer att ersättas med det nya. Med andra ord, nyckeln fungerar som ett speciellt index som kan vara vilket objekt som helst. "

Karta är en matematisk term som betecknar en uppsättning (x, y) par, där varje unikt x motsvarar något y.

Programmerare är väldigt förtjusta i Map, så här presenterar vi 4 olika samlingar som implementerar Map-gränssnittet:

"Här är dess enkla arvsstruktur:"

Karthierarki - 1

"Det gula anger att Entry är ett kapslat gränssnitt i kartgränssnittet ."

"Entry lades till för att beskriva ett elementpar som en enda enhet."

"Här är metoderna för Map<K,V>:"

Metoder Beskrivning
int size() Returnerar antalet par i kartan.
boolean isEmpty() Kontrollerar om kartan är tom.
boolean containsKey(Object key) Innehåller kartan den angivna nyckeln?
boolean containsValue(Object value) Innehåller kartan det angivna värdet?
V get(Object key) Returnerar värdet för den angivna nyckeln.
V put(K key, V value) Ställer in ett nytt värde för nyckeln.
Metoden returnerar det gamla värdet eller null
putAll(Map<? extends K, ? extends V> m) Lägger till par från en annan karta.
void clear() Rensar kartan, dvs tar bort alla par.
Set<K>keySet() Returnerar en uppsättning nycklar.
Collection<V>values() Returnerar en samling värden.
Set<Map.Entry<K, V>>entrySet() Returnerar en uppsättning par.

"K och V är typparametrarna för nycklar och värden."

"Jo, jag är bekant med de flesta av metoderna, men jag har bara arbetat med några av dem."

"Vad mer kan du berätta för mig om entréklassen?"

"Denna klass beskriver ett par element. Den har några metoder:"

Metoder Beskrivning
getKey() Returnerar nyckeln för nyckel-värdeparet.
getValue() Returnerar värdet för nyckel-värdeparet.
setValue(V value) Ställer in ett nytt värde i nyckel-värdeparet.

"Inträde är bekvämt, eftersom du kan skicka ett par till en metod utan att passera hela kartan."

"Jag förstår."

"Nu ska jag gå igenom kartimplementeringarna."

"Först ut är HashMap . Den använder hashtabeller för att lagra element. Nycklar och värden kan vara av vilken typ som helst, såväl som null. Ordningen på element kan ändras när samlingen ändras ."

"Element lagras i en HashMap som en uppsättning grupper eller hinkar. Ett elements hashCode()-metod avgör vilken hink det hamnar i."

"Mycket grovt sett faller element med en hash-kod från 1 till 100 in i den första hinken, de med ett värde från 101 till 200 faller in i den andra, och så vidare."

"Poängen med att lagra element på detta sätt är att vi kan eliminera alla element i irrelevanta hinkar när vi söker efter eller tar bort element."

"Jag förstår."

"Det finns en riktigt bra artikel om HashMap. Jag rekommenderar att du läser den: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"Den andra samlingen är LinkedHashMap . Dess största skillnad mot HashMap är att den också lagrar objekt som en länkad lista. I en vanlig HashMap är ordningen på elementen odefinierad och kan ändras över tid. Och du kan få en iterator från en LinkedHashMap och använd den för att gå igenom alla element i den ordning de lades till i LinkedHashMap. Dessutom har LinkedHashMap en iterator som låter dig gå igenom alla par i ordning efter senaste användning/aktivitet."

"Det finns en riktigt bra artikel om LinkedHashMap. Varsågod: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"Den tredje samlingen jag skulle vilja prata om idag är TreeMap ."

" TreeMap håller sina element sorterade i stigande ordning. Detta uppnås på grund av det faktum att TreeMap använder ett balanserat röd-svart träd för att lagra element."

"Som ett resultat är insättningstiden och söktiden mycket låg. Den här klassen är ett utmärkt val när du använder mycket stora mängder data."

"Och, naturligtvis, har vi en artikel om TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

"Vad har jag inte berättat om ännu?"

"WeakHashMap, men Rishi berättade om det för ett par dagar sedan."

"När var det?"

"När han pratade om SoftReference, WeakReference och PhantomReference."

"Jag tror dig, med tanke på att du namngav dem alla rätt. Ta det sedan och slappna av. Vi ses ikväll."

"Hejdå, Ellie."