3 Stimmen

HashSet Problem - Gleiche und hashCode mit enthält arbeiten anders als ich erwarten würde

Ich habe den folgenden Code:

class IncidentTag:
     def __init__(self,tag):
        self.tag = tag
     def equals(self,obj):
        return self.tag.equals(obj.tag)
     def hashCode(self):
        return self.tag.hashCode()

from java.lang import String
from java.util import HashMap
from java.util import HashSet

tag1 = IncidentTag(String("email"))
tag1copy = IncidentTag(String("email"))
tag2 = IncidentTag(String("notemail"))

print tag1.equals(tag1copy)
print tag2.equals(tag2)

print "Now with HashSet:"

hSet = HashSet()
hSet.add(tag1)
hSet.add(tag2)

print hSet.contains(tag1)
print hSet.contains(tag2)
print hSet.contains(tag1copy)

Die Ausgabe ist: 1 1 Jetzt mit HashSet: 1 1 0

Allerdings hätte ich erwartet, dass die letzte Zeile lautet true (1) auch. Gibt es etwas Offensichtliches, das ich übersehe?

(ja, ich weiß, dass mein equals Methode und hashcode Methoden einige Probleme nicht berücksichtigen... sie sind absichtlich einfach, aber lassen Sie mich wissen, ob die Probleme dort dieses Problem verursachen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X