GeeksforGeeks

som vi vet att en uppsättning är en väldefinierad samling av olika objekt. Varje medlem i en uppsättning kallas ett element i uppsättningen. Så med andra ord kan vi säga att en uppsättning aldrig kommer att innehålla dubbla element. Men hur i java Set interface implementerade klasser som HashSet, LinkedHashSet, TreeSet etc. uppnå denna unika. I det här inlägget kommer vi att diskutera den dolda sanningen bakom denna unikhet.

Hur fungerar HashSet internt i Java?

uppmärksamhet läsare! Sluta inte lära dig nu. Få tag på alla viktiga Java Foundation och samlingar koncept med grunderna i Java och Java Samlingar kurs på en studentvänligt pris och bli industrin redo. För att slutföra din förberedelse från att lära sig ett språk till DS Algo och många fler, se fullständig Intervjuförberedelsekurs.

hur Set / HashSet fungerar internt i Java
vi förstår detta med ett exempel.Låt oss se resultatet av följande program som försöker lägga till dubbla element i en HashSet.

import java.util.HashSet;
class Test
{
public static void main(String args)
{
HashSet hs = new HashSet();
boolean b1 = hs.add("Geeks");
boolean b2 = hs.add("GeeksforGeeks");
boolean b3 = hs.add("Geeks");
System.out.println("b1 = "+b1);
System.out.println("b2 = "+b2);
System.out.println("b3 = "+b3);
System.out.println(hs);
}
}



utgång:

b1 = trueb2 = trueb3 = false

nu från utgången är det uppenbart att när vi försöker lägga till ett duplikatelement i en uppsättning med ADD () – metoden, returnerar den false, och element läggs inte till i hashset, eftersom det redan finns. Nu kommer frågan, hur add () – metoden kontrollerar om uppsättningen redan innehåller det angivna elementet eller inte. Det blir tydligare om vi tittar närmare på add () – metoden och standardkonstruktören i HashSet-klassen.

// predefined HashSet classpublic class HashSet{ // A HashMap object private transient HashMap map; // A Dummy value(PRESENT) to associate with an Object in the Map private static final Object PRESENT = new Object(); // default constructor of HashSet class // It creates a HashMap by calling // default constructor of HashMap class public HashSet() { map = new HashMap(); } // add method // it calls put() method on map object // and then compares it's return value with null public boolean add(E e) { return map.put(e, PRESENT)==null; } // Other methods in Hash Set}

nu som du kan se att när vi skapar en HashSet skapar den internt en HashMap och om vi sätter in ett element i denna HashSet med add () – metoden, kallar den faktiskt put () – metoden på internt skapat HashMap-objekt med element som du har angett som det är nyckel och konstant objekt som heter ”PRESENT” som det är värde. Så vi kan säga att en uppsättning uppnår unikhet internt genom HashMap. Nu kommer hela historien om hur en HashMap och put () – metod internt fungerar.

som vi vet i en HashMap är varje nyckel unik och när vi kallar put(Key, Value) – metoden returnerar den det tidigare värdet associerat med key eller null om det inte fanns någon mappning för key. Så I add () – metoden kontrollerar vi returvärdet för kartan.sätt (nyckel, värde) metod med null-värde.

  1. om kartan.put (nyckel, värde) returnerar null, sedan uttalandet ”karta.put (e, PRESENT) = = null” kommer att returnera true och element läggs till i HashSet(internt HashMap).
  2. om kartan.put (nyckel, värde) returnerar Gammalt värde på nyckeln, sedan uttalandet ”karta.put (e, PRESENT) = = null” kommer att returnera false och elementet läggs inte till i HashSet(internt HashMap).

som LinkedHashSet utökar HashSet, så det internt kallar konstruktörer av HashSet med super (). På samma sätt skapar ett objekt av TreeSet-klassen internt objekt av navigerbar karta som backing-karta.

relaterad artikel : Hur HashMap internt fungerar i Java.

denna artikel är bidragit med Gaurav Miglani. Om du gillar GeeksforGeeks och vill bidra kan du också skriva en artikel med contribute.geeksforgeeks.org eller maila din artikel till [email protected]. se din artikel som visas på GeeksforGeeks huvudsida och hjälp andra nördar.

Lämna ett svar

Din e-postadress kommer inte publiceras.