2017-01-12 1 views
-1

Ich habe verzweifelt Zweifel an folgenden:Wie verwendet das Hashset Hashtable, wenn der Hash-Satz mehr als ein Objekt mit doppeltem Wert enthält?

sagt sie, ich

hashset<employee> set = new hashSet(); 
employee e1 = new employee("adithyan",1); 
employee e2 = new employee("santhosh",1); 
employee e3 = new employee("pavan",2); 

set.add(e1); 

erstellen --- e1 ist das Objekt, wie hashtable einzigartigen hashcode für diesen erzeugt und wie dieses Objekt wird in Hash-Tabelle gespeichert werden, wie wir wissen hashtable speichert Schlüssel-Wert-Paar

set.add(e2); 

- sagen lassen e1 und e2 hashcode sind gleich und Wert wird in gleichen Eimer gespeichert und wenn ich auf id suche = 1, wie es da e1 und e2 Hashcodes suchen sind sa ich würde wohl e1 und e2 im selben eimer speichern, was wäre das ergebnis dafür?

Ich bin verwirrt mit Bucketing, die mehr als ein Objekte zusammen mit Objekten hat gleiche Daten (sagen wir bucket1-> object1.city = bglr, object2.city. = Bglr) - in diesem Fall Hashcode wird gleich sein Beide Objekte sind im gleichen Eimer, ich weiß nicht, wie die Suche funktionieren würde!

Kann jemand erklären, wie Hashset mit demselben Hashcode und Bucketting Konzept funktioniert?

+0

Zunächst verwendet HashSet HashMap nicht HashTable. Zweitens werden sowohl hashCode als auch equals bei der Suche nach einem Schlüssel in der Karte/dem Element in der Menge verwendet. – Eran

+0

Mögliches Duplikat von [Wie behandelt eine Java HashMap verschiedene Objekte mit demselben Hashcode?] (Http://stackoverflow.com/questions/6493605/how-does-a-java-hashmap-handle-different-objects-with -the-same-hash-code) – shmosel

+0

HashSet verwendet Hashtabellen im Hintergrund –

Antwort

0

HashMap und HashSet arbeiten Sie mit der Methode hashCode, um festzustellen, in welchem ​​Bucket ein Wert gespeichert werden soll. Wenn Sie einen neuen Wert hinzufügen, sucht er den richtigen Bucket und überprüft alle Werte in diesem Bucket mit equals, um sicherzustellen, dass das, was Sie hinzufügen, kein Duplikat ist.

Wenn ein Wert abgerufen wird, wird der entsprechende Bucket überprüft (basierend auf erneut) und dann ein equals Aufruf ausgeführt, um sicherzustellen, dass es wirklich der Wert ist, nach dem Sie suchen.

Wenn umdefiniert Sie equals und hashCode Methoden für Employee von id nur passen, wird dann e2 ein Duplikat in Betracht gezogen werden, und es wird den vorherigen Wert ersetzen, auch wenn das nicht das, was Sie wollen sein kann. Mit anderen Worten, das Verhalten der HashMap wird dadurch definiert, wie Sie HashCode und Equals implementiert haben.

Verwandte Themen