Zoals we weten is HashSet een beroemde klasse in Java. HashSet wordt gebruikt om de waarden op te slaan met behulp van een hashtabel. In deze tutorial behandelen we HashSet in Python. We zullen ook leren hoe we HashSet in Python kunnen ontwerpen.
Een HashSet is een fundamentele datastructuur bij programmeren, die vaak voorkomt in talen zoals Java. Het behoort tot het Java Collections Framework en dient als implementatie van de ingestelde interface. Het onderscheidende kenmerk van een HashSet is de mogelijkheid om elementen op te slaan op een manier die een efficiënte controle op het bestaan van specifieke elementen mogelijk maakt en de uniciteit binnen de set garandeert. In tegenstelling tot structuren zoals lijsten, onderhoudt een HashSet geen specifieke volgorde tussen de elementen.
Een belangrijk kenmerk van een HashSet is de garantie voor uniciteit; het staat geen dubbele elementen toe. Bewerkingen zoals het toevoegen, verwijderen en controleren op de aanwezigheid van elementen hebben doorgaans een constante gemiddelde prestatie, waardoor het een efficiënte keuze is voor dergelijke taken. Het is echter essentieel op te merken dat de volgorde van elementen in een HashSet niet gegarandeerd is.
Sleuteleigenschappen:
Uniciteit: Een HashSet staat geen dubbele elementen toe. Het gebruikt de equals()-methode om te controleren op duplicaten, zodat elk element in de set uniek is.
b+ boom
Geen bestelling: De elementen in een HashSet worden niet in een bepaalde volgorde opgeslagen. Als u de volgorde van de elementen wilt behouden, kunt u overwegen een LinkedHashSet te gebruiken, die de volgorde van invoeging handhaaft.
Onderliggende gegevensstructuur: Intern gebruikt een HashSet een hashtabel om elementen op te slaan. Dit zorgt voor een constante gemiddelde complexiteit voor basisbewerkingen zoals toevoegen, verwijderen en bevat.
Nulelementen: Een HashSet staat één nulelement toe. Als u probeert een duplicaat null-element toe te voegen, wordt het bestaande vervangen.
Invoering
We kunnen HashSet ontwerpen zonder hashtabelbibliotheken te gebruiken. Hieronder staan de verschillende functies -
voeg(x) toe - De add(x)-methode wordt voornamelijk gebruikt om een waarde x in de HashSet in te voegen.
bevat(x) - De methode contain(x) wordt voornamelijk gebruikt om te controleren of een waarde x aanwezig is in de HashSet of niet.
wiskundige methoden in Java
verwijder(x) - De remove(x)-methode wordt voornamelijk gebruikt om x uit de HashSet te verwijderen. Als de HashSet geen enkele waarde heeft, zal deze niets doen.
Laten we deze methoden begrijpen aan de hand van onderstaand voorbeeld.
Initialiseer eerst de HashSet en roep de functie add(1) aan. Er wordt 1 toegevoegd aan de hashset. Roep add(3) aan, wat 3 optelt, en roep vervolgens contain(1) aan. Er wordt gecontroleerd of 1 aanwezig is of niet in de hashset. Nu noemen we bevat(2), add(2), bevat(2), remove(2), bevat(2).
De uitvoer wordt respectievelijk geretourneerd als waar voor 1 aanwezig is, onwaar voor 2 niet aanwezig is, waar voor 2 aanwezig is en onwaar voor 2 niet aanwezig is.
Basisbewerkingen van HashSet in Python
We kunnen enkele basisbewerkingen in HashSet uitvoeren met behulp van de volgende methoden. Laten we deze methoden begrijpen.
Nieuwe waarden toevoegen in HashSet
In het onderstaande voorbeeld voegen we de waarde toe aan de hashset met behulp van de functie add(). De functie add() voegt de waarde één voor één toe. Laten we de volgende code bekijken.
Voorbeeld -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6)
Uitgang:
Junit-testgevallen
Adding value: 2 Adding value: 7 Adding value: 6
Waarden verwijderen in HashSet
We kunnen de bestaande waarde verwijderen met behulp van de functie remove(). Laten we de volgende code begrijpen.
Voorbeeld -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.remove(7) obj.remove(6)
Uitgang:
Adding value: 2 Adding value: 7 Adding value: 6 Removed value: 7 Removed value: 6
Controleren of er waarden bestaan in HashSet
In dit voorbeeld laten we zien hoe we kunnen controleren of een bepaalde waarde bestaat of niet bevat() functie. Laten we de volgende code begrijpen.
Voorbeeld -
from hs import HashSet obj = HashSet() obj.add(2) obj.add(7) obj.add(6) obj.contains(2)
Uitgang:
C#-codevoorbeelden
Adding value: 2 Adding value: 7 Adding value: 6 It contains: 2
Algoritme voor de HashSet in Python
In de eerste stap definiëren we één gegevensstructuur genaamd HashList. Vervolgens initialiseren we een lege lijst als een nieuwe_lijst . Vervolgens definiëren we een functie update() waarin found een Booleaanse waarde False zal opslaan. Nu gebruiken we for-lus voor elke index I en K. Als de sleutel hetzelfde is als 'k', dan nieuwe_lijst[i]=k en gevonden waarde ingesteld op True. De waarde wordt onderaan de lijst ingevoegd als er geen waarde wordt gevonden.
De volgende stap is het definiëren van de functie get(), die we voor de lus zullen gebruiken, en als de waarde van k hetzelfde is als de sleutel, zal de uitvoer True zijn; anders, Vals. Als de sleutel hetzelfde is als 'k', verwijdert u de waarde uit de lijst nieuwe lijst. Hetzelfde proces wordt toegepast in de functie remove().
Nu gaan we de hoofdklasse HashSet maken. Deze klasse declareert de initialisatiefunctie waarbij de key_space-waarde = 2096. De hash_table zal een lijst hebben met objecten van het type new_list van grootte sleutel_spatie . Vervolgens zullen we de functie add() maken, waarin hash_key = sleutel%sleutel_spatie en update de sleutel van hash_table[hash_key]. Daarna bellen wij met de functie verwijderen , waarin hash_key = sleutel % key_space, en verwijder de sleutel van hash_table[hash_key]. Daarna bellen wij met de bevat functie , waarin
hash_key = sleutel % key_space, en haal de sleutel op van hash_table[hash_key].
java string indexof
Laten we het stapsgewijze implementatie-algoritme bekijken.
algoritme -
- Maak een datastructuur met de naam HashSet, initialiseer deze zoals hieronder
- nieuwe_lijst = []
- Definieer een functie update(). Dit zal de sleutel vergen
- gevonden := Onwaar
- voor elke index i en sleutel k in new_list, doe dat
- als sleutel hetzelfde is als k, dan
- nieuwe_lijst[i]:= sleutel
- gevonden:= Waar
- kom uit de lus
- als het vals wordt bevonden, dan
- plaats de sleutel aan het einde van new_list
- Definieer een functie get() . Dit zal de sleutel vergen
- voor elke k in new_list, doe dat
- als k hetzelfde is als sleutel, dan
- terugkeer Waar
- terugkeer Vals
- Definieer een functie remove(). Dit zal de sleutel vergen
- voor elke index i en sleutel k in new_list, doe dat
- als sleutel hetzelfde is als k, dan
- verwijder nieuwe_lijst[i]
- Maak nu een aangepaste hashSet. Er zullen enkele methoden zijn als volgt
- Initialiseer dit als volgt -
- sleutel_spatie := 2096
- hash_table:= een lijst met bucket-type objecten met de grootte key_space
- Definieer een functie add(). Dit zal de sleutel vergen
- hash_key:= sleutel mod key_space
- bel update(sleutel) van hash_table[hash_key]
- Definieer een functie remove(). Dit zal de sleutel vergen
- hash_key:= keymodkey_spatie
- sleutel verwijderen uit hash_table[hash_key]
- Definieer een functie bevat(). Dit zal de sleutel vergen
- hash_key:= keymodkey_spatie
- return get(key) van hash_table[hash_key]
Implementatie van HashSet in Python
Hier zullen we het bovenstaande algoritme implementeren en een Python-programma maken. We zullen de twee klassen definiëren: HashSet en CreateHashset. Laten we de onderstaande code bekijken.
Code-
# Here, we are Designing the HashSet in python # Here, we are checking the values and will return the output class class verifyvalues: # Here, we are initialization function which has list new_list def __init__(self): self.new_list=[] # Here, we have the function to update values def update(self, key): found=False for i,k in enumerate(self.new_list): if key==k: self.new_list[i]=key found=True break if not found: self.new_list.append(key) # Here, we have function to get values def get(self, key): for k in self.new_list: if k==key: return True return False # Here, we have function to remove values def remove(self, key): for i,k in enumerate(self.new_list): if key==k: del self.new_list[i] # Here, we have defined a class as HashSet class HashSet: # Here, we have defined an Initialization function def __init__(self): self.key_space = 2096 self.hash_table=[verifyvalues() for i in range(self.key_space)] def hash_values(self, key): hash_key=key%self.key_space return hash_key # Here, we have also defined an add function def add(self, key): self.hash_table[self.hash_values(key)].update(key) # Here, we have also defined a remove function def remove(self, key): self.hash_table[self.hash_values(key)].remove(key) # Here, we have defined the contains function def contains(self, key): return self.hash_table[self.hash_values(key)].get(key) def display(self): ls=[] for i in self.hash_table: if len(i.new_list)!=0:ls.append(i.new_list[0]) print(ls) ob = HashSet() print(ob.hash_values(10)) print('Add 10') ob.add(10) print(ob.hash_values(6)) print('Add 6 ') ob.add(6) print(ob.hash_values(5)) print('Add 5 ') ob.add(5) print('Contains 10 : ',ob.contains(10)) print('Contains 3: ',ob.contains(3)) print('Contains 8 : ',ob.contains(9))
Uitgang:
10 Add 10 6 Add 6 5 Add 5 Contains 10 : True Contains 3: False Contains 8 : False 2 Add 2 3 Add 3 Contains 2 : True Remove 2 Contains 2 : False Contains 3 : True [3, 5, 6, 10]
Uitleg: