január 19, 2022

Java éhes

a core java interjú kérdések , ez a közös, hogy bombázzák gyűjtemény keret kérdéseket . Interjút készítettem a Goldman Sachs-ban, és ott feltettek egy kérdést, ahol megbotránkoztam . Kérdező megkérdezte, hogyan valósítja meg a Java-t, más szóval a Hashset belső működését, vagy hogyan működik a hashset a java-ban. Azaz, hogyan fog arról, hogy minden egyes elem egyedi használata nélkül Set interfészek vagy osztályok, amelyek megvalósítják Set Interface .
olvassa el még: Hogyan működik a hash map java-ban
megadtam a választ , bár az interjú körét is minősítettem , de a válasz messze nem kielégítő .
ezért hazamentem, és végeztem egy kis kutatást . Végül megkaptam a választ, és megosztottam veled .

hogyan működik a HashSet belsőleg a java-ban

Set implementáció belsőleg a Java-ban
a készlet minden eleme egyedi . Annak érdekében, hogy a készletben ne legyen ismétlődő elem .
tehát a java-ban, ha elemeket akarunk hozzáadni a készlethez, akkor így írunk kódot

public class JavaHungry { public static void main(String args) { // TODO automatikusan generált módszer csonk HashSet<Object> hashset = new HashSet<Object>(); hashset.hozzáad (3); hashset.add ("Java éhes"); hashset.Hozzáadás ("Blogspot"); rendszer.kifelé.println ("Set is" + hashset); }}

kinyomtatja az eredményt : Set
most hagyjuk hozzá ismétlődő elem a fenti kódot

public class JavaHungry { public static void main(String args) { HashSet< Object>hashset = new HashSet< Object> (); hashset.hozzáad (3); hashset.add ("Java éhes"); hashset.Hozzáadás ("Blogspot"); hashset.add (3); / / ismétlődő elemek hashset.add ("Java éhes"); / / ismétlődő elemek rendszer.kifelé.println ("Set is" + hashset); }}

kinyomtatja az eredményt : A Set értéke
most, hogy mi történik belsőleg, amikor a Set objektum add() metódusában duplikált elemeket ad át , hamis lesz , és nem adja hozzá a HashSet-hez, mivel az elem már jelen van .eddig olyan jó .
de a fő probléma merül fel, hogy hogyan tér vissza hamis . Tehát itt van a válasz
amikor megnyitja az add() metódus HashSet megvalósítását a Java API-kban rt.jar , a következő kódot találja benne

nyilvános osztály HashSet< E> kiterjeszti az AbstractSet< E> végrehajtja a készletet< E>, klónozható, java.io.Serializable{ private transient HashMap< E, Object> map; / / Dummy érték társítani egy objektumot a háttér térkép privát statikus végső objektum PRESENT = new Object (); public HashSet() { map = new HashMap<>(); } // néhány kód, azaz más módszerek Hash Set nyilvános logikai add (E e) { return map.put (e, PRESENT)= = null;} / / néhány kódot, azaz más módszerek Hash Set}

tehát egyediséget érünk el a készletben, belsőleg a java-ban a HashMap segítségével . Amikor létrehoz egy objektumot HashSet akkor létrehoz egy objektumot HashMap mint látható a dőlt sor a fenti kódot .
már megbeszéltük, hogyan működik a HashMap belsőleg a java-ban .
mint a HashMap-ben tudjuk, minden kulcs egyedi . Tehát amit a készletben csinálunk, az az, hogy átadjuk az add(Elemene e) Argumentumát, amely e kulcs a HashMap-ban . Most valamilyen értéket kell társítanunk a kulcshoz , tehát amit a Java API fejlesztő tett, az az, hogy átadja a Dummy értéket ( new Object ()), amelyet a jelen objektumhivatkozás utal .
tehát valójában, ha hozzá egy sort HashSet mint hashset.add (3) a java belsőleg azt teszi, hogy az e elemet ide teszi 3 kulcsként a HashMap-ban(a HashSet objektum létrehozása során létrehozott), és néhány dummy értéket, amely az objektum objektuma, értékként adja át a kulcsnak .
most, ha látja a HashMap put(K kulcs,V érték) módszer kódját , akkor valami ilyesmit talál
nyilvános V put(K kulcs, V érték) {
//Néhány kód
}
a fenti kódban a legfontosabb észrevétel,hogy a put (kulcs, érték)
1 értéket ad vissza. null, ha a kulcs egyedi és hozzáadódik a térképhez
2. A kulcs régi értéke, ha a kulcs duplikált
tehát a HashSet add () metódusban ellenőrizzük a map visszatérési értékét.put(kulcs,érték) módszer null érték
azaz
nyilvános logikai add (E e) {
visszatérési térkép.put (e, jelen)= = null;

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.