19 tammikuun, 2022

Java Hungry

core java interview questions-kysymyksissä on tavallista , että niitä pommitetaan Collection framework-kysymyksillä . Minua haastateltiin Goldman Sachsissa, ja siellä kysyttiin, missä kohtaa menin mykäksi . Haastattelija kysyi, miten toteutat setin Javassa toisin sanoen hashsetin sisäisen työskentelyn tai miten hashset toimii Javassa. Eli miten varmistaa, että jokainen elementti on ainutlaatuinen Ilman asettaa rajapintoja tai luokkia, jotka toteuttavat asetettu käyttöliittymä .
Lue myös : miten hash-kartta toimii Javalla
annoin vastauksen , vaikka kelpuutin haastattelukierroksen myös , mutta vastaus on kaikkea muuta kuin tyydyttävä .
joten tulin takaisin kotiin ja tein vähän tutkimusta . Lopulta sain vastauksen ja Jasin sen kanssasi .

miten HashSet toimii sisäisesti Javassa

Set Implementation sisäisesti Javassa
jokainen sarjan elementti on ainutlaatuinen . Niin, että ei ole päällekkäistä elementtiä asetettu .
joten Javassa jos haluamme lisätä elementtejä sarjaan, kirjoitamme koodin näin

public class JavaHungry { public staattinen void main(String args) { // TODO automaattisesti luotu metodi stub HashSet<Object> hashset = new HashSet<Object>(); hashset.lisää (3); hashset.add ("Java Hungry"); hashset.lisää ("Blogspot"); järjestelmä.ulos.println ("joukko on" +hashset); }}

se tulostaa tuloksen : Set is
now let add duplicate element in the above code

public class JavaHungry { public staattinen void main(String args) { HashSet<Object> hashset = new HashSet<Object>(); hashset.lisää (3); hashset.add ("Java Hungry"); hashset.lisää ("Blogspot"); hashset.lisää (3); // päällekkäiset elementit hashset.lisää ("Java Hungry"); / / duplicate elements System.ulos.println ("joukko on" +hashset); }}

se tulostaa tuloksen : Sarja on
nyt, mitä tapahtuu sisäisesti , kun ohitat päällekkäisiä elementtejä asetetun objektin lisää () – menetelmässä , se palauttaa epätosi ja älä lisää Hashsetiin, koska elementti on jo olemassa .
mutta suurin ongelma syntyy siitä, että miten se palautuu epätosi . Joten tässä on vastaus
kun avaat HashSet-toteutuksen lisää () – menetelmällä Java-sovellusliittymissä, joka on rt.jar , siitä löytyy seuraava koodi

 public class HashSet< E> extends AbstractSet< E>implements Set<E>, Kloneable, java.io.Serialisable{ private transient HashMap<E, Object> map; / / Dummy value to associate with an Object in the backing Map private staattinen final Object PRESENT = new Object (); public HashSet() { map = new HashMap<>(); } // SOME CODE, ts. Other methods in Hash Set public boolean add (E e) { return map.put (e, PRESENT)==null;} / / SOME CODE, TS. E Other methods in Hash Set}

niin, saavutamme ainutlaatuisuus Set, sisäisesti java kautta HashMap . Aina kun luot objektin HashSet se luo objektin HashMap kuten näet kursivoitu rivit edellä koodi .
keskustelimme jo siitä, miten HashMap toimii sisäisesti Jaavalla .
kuten tiedämme Hashmapissa, jokainen avain on ainutlaatuinen . Joten mitä teemme joukko on, että me siirtää argumentti lisää (Elemene E), joka on E avaimena HashMap . Nyt meidän täytyy liittää joitakin arvoa avain, joten mitä Java API kehittäjä teki on siirtää nuken arvo, joka on (uusi objekti ()), joka on tarkoitettu objekti viittaus läsnä .
niin, oikeastaan kun lisäät rivin Hashsetissä kuten hashset.lisää(3) Mitä java tekee sisäisesti on, että se laittaa että elementti E tässä 3 avaimena HashMap (luotu aikana HashSet objektin luominen) ja jotkut nuken arvo, joka on objektin objekti siirretään arvona avain .
nyt jos näet HashMap put-menetelmän koodin(Key k,Value V), löydät jotain tällaista
Julkinen v put (k key, V value) {
//some-koodi
}
pääkohta huomata yllä olevasta koodista on,että put (key, value) palaa
1. null, jos avain on yksilöllinen ja lisätty karttaan
2. Avaimen Vanha arvo, jos avain on kaksoiskappale
, joten HashSet add () – menetelmässä tarkistetaan kartan palautusarvo.put(key,value) – menetelmä, jonka null-arvo on
eli
Julkinen boolean add (E e) {
return map.put (e, PRESENT)= = null;

Vastaa

Sähköpostiosoitettasi ei julkaista.