Frage

ich an einem Projekt arbeite, die mich mit einem HashSet einer Klasse beinhaltet ich gemacht, die ich Test nennen wird. I definiert die angegebene HashSet etwa so:

HashSet<Test> t = new HashSet<Test>();
t.add(new Test("asdf", 1));
t.add(new Test("hello", 2));
t.add(new Test("hello", 3));

Ich habe versucht mit

t.contains(new Test("asdf", 1));

, aber es gibt false. Allerdings, wenn ich einen HashSet<Character> verwenden es scheint gut zu funktionieren. Ich habe versucht, die vorherige equals Erklärung überschreiben, aber es hat nicht funktioniert. Ich versuchte equals allein zu lassen, aber ich habe immer noch false. Ich muss wissen, was ich falsch mache?

Auch ich habe die Hash-Funktion nicht bearbeiten, i geändert nur Test.equals (Object o). Es ist ein einfaches Projekt, und da die Java-Dokumentation besagt, dass es o.equals verwendet (this), ich dachte, ich nicht haben würde.

War es hilfreich?

Lösung

Sie müssen möglicherweise auch die hashCode () -Methode überlasten.

Andere Tipps

HashSet.add(Object data) nicht gleich HashSet.add(new Test(String, int))

Versuchen HashSet.add(new Test("asdf", 1)); zu verwenden. Und machen Überschreibungen von der hashCode() Methode. Gibt es in Ihrem Code kompilieren?

Ihr Code wird nicht einmal kompilieren ...

HashSet keine Methode add () haben, die zwei Argumente akzeptiert.

Wenn Sie meinen,

t.add(new Test("asdf", 1));

anstelle von

t.add("asdf", 1);

sein, dass der Hash-Code und entspricht Methode der Test-Klasse implementiert sind richtig, wie gesagt.

Intern wird eine Hash-Tabelle wird Object # hashCode () verwenden, um Hash und Ihre Objekte Eimer und Objekt # equals () auf Gleichheit zu testen, ob es hashCode Auseinandersetzungen sind. Sie müssen sicherstellen, dass Ihre Test-Klasse geeignete Implementierungen (overrrides), um diese in Ihrem Fall sieht Zeichenfolge Gleichheit zu testen, da sonst den Standard Object # equals () Methode die Objekte Instanz Identität (ref id) verwenden. Siehe hier für ein Tutorial zu diesem Thema .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top