In dit bericht zullen we zien hoe HashSet intern werkt in Java, wat ook een favoritejava Collections interview vraag is, maar voordat we ingaan op de interne implementatie van HashSet in Java is het belangrijk om twee punten te weten over HashSet.
- HashSet in Java slaat alleen unieke waarden op, d.w.z. er zijn geen duplicaten toegestaan.
- HashSet werkt op het concept van hashing net als HashMap in Java, maar de werking verschilt op de volgende manier van de HashMap-
- in HashMap wordt een (sleutel, waarde) paar toegevoegd en de hash functie wordt berekend met behulp van key.
- waarbij zoals in de HashSet hash-functie wordt berekend met behulp van de waarde zelf. Merk op dat in HashSet wehave add(E e) methode die alleen het element dat moet worden toegevoegd als parameter neemt.
u hebt het misschien ook al geraden, aangezien de hash-functie wordt berekend met behulp van waarde, worden daarom alleen unieke evaluaties opgeslagen in de HashSet. Als u hetzelfde element opnieuw probeert op te slaan, is de berekende hash-functie hetzelfde, waardoor het element wordt overschreven.
HashSet intern gebruikt HashMap
nu terug naar interne implementatie van HashSet in Java het belangrijkste punt is HashSet class implementatie intern gebruikt HashMap om zijn elementen op te slaan.
binnen de HashSet zijn er veel constructeurs één zonder enige parameter en meerdere meer met initiële capaciteit of belastingsfactor, maar elk van deze constructeurs maakt een HashMap.Omdat HashSet intern HashMap gebruikt, zal weten hoe HashMap intern in Java werkt u helpen om te begrijpen hoe HashSet intern in Java werkt.
HashSet Constructor-fragmenten
In de HashSet-klasse in Java kunt u zien dat constructeurs van de klasse Een HashMap maken.
/*** 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);}
en de kaart, die wordt gebruikt voor het opslaan van waarden, is gedefinieerd als
private transient HashMap<E,Object> map;
in de constructor, als u hebt gemerkt, zijn er parameters genaamd initiële capaciteit en belastingsfactor.Voor HashSet, standaard initiële capaciteit is 16, dat is een array (of emmer) van Lengte 16 zou worden gemaakt en default load factor is 0,75. Waar load factor is een maat van hoe vol de hash tabel wordt toegestaan om te krijgen voordat zijn capaciteit automatisch wordt verhoogd.
hoe elementen worden toegevoegd-HashSet interne implementatie
ik zei in het bovenstaande punt 2 dat HashSet de hashfunctie berekent met waarde zelf en er is geen (sleutel, waarde) paar in HashSet en toen kwam het statement dat HashSet intern HashMap gebruikt om objecten op te slaan.Deze twee verklaringen kunnen tegenstrijdig klinken als HashMap slaat (sleutel, waarde) paar dus laten we eens kijken hoe deze deze twee contradictoire verklaringen waar houden.
eigenlijk van add method of HashSet class put () methode van HashMap wordt aangeroepen waar de waarde, die in de Set moet worden beadded, sleutel wordt en een constant object “PRESENT” als waarde wordt gebruikt.
Dat is hoe AANWEZIG is gedefinieerd in HashSet uitvoering-
// Dummy value to associate with an Object in the backing Mapprivate static final Object PRESENT = new Object();
En dat is hoe voeg methode is geïmplementeerd in HashSet klasse –
public boolean add(E e) { return map.put(e, PRESENT)==null;}
Zo kunt u zien met in de interne implementatie van de HashSet het is een (key, value) paar die daadwerkelijk aan toegevoegd.Het is gewoon dat de werkelijke waarde (die is toegevoegd aan de HashSet) wordt de sleutel en een dummy waarde ‘AANWEZIG’ is toegevoegd als waarde whenstoring het in de back-HashMap.
bijvoorbeeld een statement voor het toevoegen van een element aan HashSet – set.toevoegen(“Mumbai”); intern vertaalt in kaart.put (“Mumbai”, aanwezig); en vervolgens toegevoegd aan de back-up HashMap instantie.
een ding om hier op te merken is, in HashMap waarde kan dupliceren, maar sleutel moet uniek zijn. Dat is hoe Hashsetmaakt ervoor dat alleen unieke waarden worden opgeslagen in het, omdat de waarde die moet worden opgeslagen in de Hashsetbekom de sleutel tijdens het opslaan in HashMap.
hoe element wordt verwijderd-HashSet interne implementatie
wanneer we een element uit de HashSet moeten verwijderen, verwijdert u intern opnieuw methode van HashSetcalls methode van de HashMap verwijderen(Objectsleutel).
zo wordt het geïmplementeerd in HashSet class.
public boolean remove(Object o) { return map.remove(o)==PRESENT;}
merk op dat de methode verwijderen(Objectsleutel) van de HashMap de waarde retourneert die aan de sleutel is gekoppeld.Terwijl de methode verwijderen (Object o) van de HashSet Booleaanse waarde retourneert. Ook weten we dat voor elke toegevoegde waarde in HashSet, intern wanneer het wordt toegevoegd aan de bijbehorende HashMap, waarde wordt Sleutel en de waarde is altijd EENOBJECT genaamd aanwezig. Daarom is de waarde die wordt geretourneerd uit de remove(Object key) methode van de HashMap altijd aanwezig dus de condition map.verwijder (o) = = aanwezig.
hoe elementen worden opgehaald uit HashSet in Java
in HashSet is er geen get methode zoals voorzien in kaart of lijst. In HashSet iterator is er die zal iteratethrough de waarden van de Set. Intern zal het de keyset van de HashMap aanroepen, omdat waarden worden opgeslagen als sleutels in de HashMap, dus wat we krijgen is de waarden opgeslagen in de HashSet.
zo wordt iterator intern geïmplementeerd in de HashSet in 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();}
punten om op te merken
- in tegenstelling tot HashMap waar hash-functie wordt berekend met behulp van sleutel HashSet gebruikt de waarde zelf om de hash-functie te berekenen.
- omdat de hash-functie wordt berekend met behulp van waarde, worden daarom alleen unieke waarden opgeslagen in de HashSet.
- HashSet gebruikt intern HashMap om zijn elementen op te slaan.
- wanneer element wordt toegevoegd aan HashSet met behulp van ADD (E e) methode intern HashSet calls put () methode van de HashMap waar de waarde doorgegeven in de add methode wordt sleutel in de put () methode. Een dummy waarde “aanwezig” wordt doorgegeven als waarde inde put() methode.
aanbevelingen voor het leren (Udemy cursussen))
- Java Programming Masterclass cursus
- Java In-Depth: Word een complete Java Engineer!
- Spring Framework Master Class Course
- Complete Python Bootcamp Course
- Python for Data Science and Machine Learning
dat is alles voor dit onderwerp Hoe HashSet intern werkt in Java. Als u enige twijfel of suggesties te maken Gelieve een reactie te plaatsen. Bedankt!
Verwante Onderwerpen
- Hoe ArrayList Werkt Intern in Java
- Hoe HashMap Werkt Intern in Java
- Hoe LinkedList Klasse Werkt Intern in Java
- LinkedHashSet in Java Met Voorbeelden
- TreeSet in Java Met Voorbeelden
ook als-