Java Sulten
i kjerne java intervju spørsmål, er det vanlig å bli bombardert Med Samling rammeverk spørsmål . Jeg ble intervjuet I Goldman Sachs, og der spurte de et spørsmål hvor jeg ble dumbstruck . Intervjuer spurte Hvordan implementerer Du Sett I Java med andre ord internt Arbeid Av Hashset eller Hvordan hashset fungerer i java. Det vil si, hvordan vil sørge for at hvert element er unikt uten Å bruke Settgrensesnitt eller Klasser som implementerer Settgrensesnitt .
Les Også : Hvordan hash-kart fungerer i java
jeg ga svaret,selv om jeg også kvalifiserte intervjurunden , men svaret er langt fra tilfredsstillende .
så jeg kom hjem og gjorde litt forskning . Så til slutt fikk jeg svaret og dele det med deg .
Sett Implementering Internt I Java
Hvert element i settet er unikt . Slik at det ikke er noe duplikatelement i settet .
så i java hvis vi vil legge til elementer i settet, skriver vi kode som dette
offentlig Klasse JavaHungry { public static void main (String args) {//TODO Auto-generated method stub HashSet <Object > hashset = new HashSet < Object> (); hashset. legg til (3); hashset.legg til ("Java Sulten"); hashset.legg til ("Blogspot"); System.ut.println ("Sett er" + hashset); }}
det vil skrive ut resultatet : Sett er
la nå legge til duplikatelement i koden ovenfor
offentlig Klasse JavaHungry { offentlig statisk tomrom hoved(Streng args) { HashSet<Objekt> hashset = nytt HashSet < Objekt > (); hashset.legg til (3); hashset.legg til ("Java Sulten"); hashset.legg til ("Blogspot"); hashset.legg til (3); / / duplisere elementer hashset.legg til ("Java Sulten"); / / duplisere elementer System.ut.println ("Sett er" + hashset); }}
det vil skrive ut resultatet : Sett er
Nå, hva skjer internt når du passerer dupliserte elementer i add () – metoden Til Set-objektet, vil den returnere falsk og ikke legge til HashSet, da elementet allerede er til stede .Så langt så bra.
men hovedproblemet oppstår at hvordan det returnerer false . Så her er svaret
når du åpner HashSet-implementeringen av add () – metoden I Java Apier som er rt.jar , finner du følgende kode i den
offentlig Klasse HashSet<E>utvider AbstractSet<E>implementerer Sett< E >, Cloneable, java.io.Serializable{ private transient HashMap < e, Object> map; / / Dummy verdi å knytte Til Et Objekt i backing Kartet privat statisk endelig Objekt PRESENT = new Object (); public HashSet () { map = new HashMap<>(); } // NOEN KODE, dvs. andre metoder I Hash Sett offentlig boolsk add (E e) { returkart.sett (e, PRESENT) = = null;} / / NOEN KODE, dvs. Andre metoder I Hash Sett}
Så, vi oppnår unikhet I Sett, internt i java gjennom HashMap . Når du lager Et Objekt Av HashSet, vil det skape et Objekt Av HashMap som du kan se i kursiv linjene i koden ovenfor .
vi diskuterte allerede Hvordan HashMap fungerer internt i java .
som Vi vet I HashMap er hver nøkkel unik . Så det vi gjør i settet er at vi sender argumentet i add (Elemene E) Som Er E som en nøkkel i HashMap . Nå må vi knytte noen verdi til nøkkelen, så Hva Java apis developer gjorde er å passere Dummy-verdien som er (nytt Objekt ()) som refereres AV Objektreferanse TIL STEDE .
så, faktisk når du legger til en linje I HashSet som hashset.legg til (3) hva java gjør internt er at det vil sette det elementet e her 3 som en nøkkel i HashMap (opprettet under HashSet-objektopprettelse) og noen dummy-verdi Som Er Objektets objekt, sendes som en verdi til nøkkelen .
nå hvis du ser koden Til HashMap put(Nøkkel k,Verdi V) – metoden , finner du noe som dette
offentlig v put(k-nøkkel, v-verdi) {
/ / noen kode
}
hovedpunktet å legge merke til i koden ovenfor er at put (nøkkel,verdi) vil returnere
1. null, hvis nøkkelen er unik og lagt til kartet
2. Gammel Verdi av nøkkelen, hvis nøkkelen er duplikat
Så , I HashSet add () – metoden, sjekker vi returverdien til kart.sett (nøkkel,verdi) metode med null verdi
dvs.
offentlig boolsk legg til(E e) {
returkart.sett (E, NÅVÆRENDE) = = null;