i dette innlegget vil vi se hvordan HashSet internt fungerer I Java, som også er en favoritejava Samlinger intervju spørsmål, men før du går inn i intern implementering Av HashSet I Java er det viktig å vite to punkter Om HashSet.
- HashSet i Java lagrer bare unike verdier, dvs. ingen duplikater er tillatt.
- HashSet fungerer på begrepet hashing akkurat Som HashMap I Java, men arbeidet er forskjellig fra HashMap på følgende måte –
- I HashMap a (Nøkkel, Verdi) par er lagt til og hash-funksjonen beregnes ved hjelp av nøkkel.
- hvor Som I HashSet hash-funksjonen beregnes ved hjelp av selve verdien. Merk at I HashSet wehave add (E e) metode som tar bare elementet som skal legges til som parameter.
Også du har kanskje gjettet nå, siden hash-funksjonen beregnes ved hjelp av verdi, er det derfor bare uniquevalues lagret i HashSet. Hvis du prøver å lagre det samme elementet igjen, vil den beregnede hash-funksjonen være den samme, og dermed vil elementet bli overskrevet.
HashSet internt bruker HashMap
nå kommer tilbake til intern implementering Av HashSet I Java det viktigste punktet Er HashSet class implementering internt bruker HashMap å lagre det er elementer.
Innenfor HashSet Er det mange konstruktører en uten noen parameter og flere med innledende kapasitet eller belastningsfaktor, men hver av disse konstruktørene skaper En HashMap.Siden HashSet internt bruker HashMap så å vite hvordan HashMap fungerer internt I Java vil hjelpe deg å forstå hvordan HashSet fungerer internt I Java.
HashSet Constructor snippets
I HashSet-klassen I Java kan du se at konstruktører av klassen lager En HashMap.
/*** Constructs a new, empty set; the backing <tt>HashMap</tt> instance has* default initial capacity (16) and load factor (0.75).*/public HashSet() { map = new HashMap<>();}
public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor);}
og kartet, som brukes til å lagre verdier, er definert som
private transient HashMap<E,Object> map;
i konstruktøren, hvis du har lagt merke til, er det parametere som heter innledende kapasitet og belastningsfaktor.For HashSet er standard innledende kapasitet 16, det vil si en matrise (eller bøtte) med lengde 16 vil bli opprettet og standardbelastningsfaktor er 0,75. Hvor belastningsfaktor er et mål på hvor fullt hashbordet får lov til å komme førdens kapasitet økes automatisk.
hvordan elementer legges til – HashSet intern implementering
jeg uttalte i punkt 2 over At HashSet beregner hashfunksjonen ved hjelp av verdien selv og det er ingen (Nøkkel, Verdi) par I HashSet og så kom utsagnet Om At HashSet internt bruker HashMap til å lagre objekter.Disse to uttalelsene kan høres motstridende Som HashMap butikker (nøkkel, verdi) par så la oss se hvordan disse disse to motstridende uttalelsene holder sant.
Faktisk fra add method Of HashSet class put () metode For HashMap kalles der verdien, som må legges til I Settet, blir Nøkkel og et konstant objekt «TILSTEDE» brukes som verdi.
DET ER SLIK PRESENT er definert i HashSet-implementeringen-
// Dummy value to associate with an Object in the backing Mapprivate static final Object PRESENT = new Object();
Og det er slik add-metoden er implementert i HashSet-klassen –
public boolean add(E e) { return map.put(e, PRESENT)==null;}
Så du kan se med i den interne implementeringen Av HashSet er det et (nøkkel, verdi) par som faktisk får added.It det er bare at den faktiske verdien (som legges Til HashSet) blir nøkkelen, og en dummy-verdi «TILSTEDE» legges til som verdi når den lagres i Backing HashMap.
For eksempel en setning for å legge til et element I HashSet-set.legg til («Mumbai»); internt oversetter til kart.put («Mumbai», NÅVÆRENDE) ; og deretter lagt til backing HashMap-forekomsten.
En ting å merke seg her er, I HashMap-verdien kan være duplikat, Men Nøkkelen skal være unik. Slik Sikrer Hashset At bare unike verdier lagres i den, siden verdien som skal lagres i Hashsetblir nøkkelen mens du lagrer den i HashMap.
Hvordan element er fjernet – HashSet intern implementering
når vi trenger å fjerne et element Fra HashSet, fjern internt igjen metode For HashSetcalls fjern (Objektnøkkel) metode For HashMap.
det er slik det implementeres i HashSet-klassen.
public boolean remove(Object o) { return map.remove(o)==PRESENT;}
her merk at fjern(Objektnøkkel) metode For HashMap returnerer Verdien som er knyttet til nøkkelen.Mens fjern (Objekt o) – metoden for HashSet returnerer Boolsk verdi. Vi vet også at for hver valueadded I HashSet, internt når den legges til den tilknyttede HashMap, blir verdien Nøkkel og verdien er alltid anobject kalt PRESENT. Derfor er verdien som returneres fra fjern (Objektnøkkel) – metoden Til HashMap ALLTID TILSTEDE, og dermed betingelseskartet.fjern (o)==TILSTEDE.
hvordan elementer hentes fra HashSet I Java
I HashSet er det ingen get-metode som angitt I Kart eller Liste. I HashSet iterator er det som vil iterategjennom Verdiene Av Settet. Internt vil det ringe keyset Til HashMap, da verdier lagres som keysin HashMap, så hva vi får er verdiene som er lagret i HashSet.
det er hvordan iterator er internt implementert i HashSet I Java.
/*** Returns an iterator over the elements in this set. The elements* are returned in no particular order.** @return an Iterator over the elements in this set* @see ConcurrentModificationException*/public Iterator<E> iterator() { return map.keySet().iterator();}
Poeng å merke
- I Motsetning Til HashMap hvor hash-funksjonen beregnes ved hjelp av nøkkel HashSet bruker selve verdien til å beregne hash-funksjonen.
- siden hash-funksjonen beregnes ved hjelp av verdi, er det derfor bare unike verdier lagres i HashSet.
- HashSet bruker Internt HashMap til å lagre elementene.
- når elementet legges Til HashSet ved hjelp av add(E e) – metoden internt HashSet kaller put () – metoden for HashMap hvorverdien som sendes i add-metoden, blir nøkkelen i put () – metoden. En dummy verdi «PRESENT» er bestått som verdi iinnstillingsmetoden ().
Anbefalinger for læring (Udemy Kurs)
- Java Programming Masterclass Course
- Java I Dybden: Bli En Komplett Java Ingeniør!
- Spring Framework Master Class Course
- Komplett Python Bootcamp Kurs
- Python For Datavitenskap Og Maskinlæring
Det er alt For dette emnet Hvordan HashSet Fungerer Internt I Java. Hvis du er i tvil eller noen forslag til å gjøre kan du slippe en kommentar. Takk!
Relaterte Emner
- Hvordan ArrayList Fungerer Internt I Java
- Hvordan HashMap Fungerer Internt I Java
- Hvordan LinkedList-Klassen Fungerer Internt I Java
- LinkedHashSet I Java Med Eksempler
- TreeSet I Java Med Eksempler
Du Kan Også Like –