Guten Tag,
ich war bisher der Annahme, dass beim Aufruf der Methode
Der Hashwert des objekts mittels der Methode
ermittelt und mit den bereits vorhandenen werten des HashSets verglichen wird.
Ich habe hierzu folgende Testklasse implementiert:
Jetzt möchte ich zwei Instanzen der Klasse Test erzeugen und in
ein HashSet packen. Ich sorge dafür, dass beide Klassen die gleichen
Elemente in ihrer Collection stehen haben, der entstehende hashcode
also gleich sein müsste:
Nun habe ich allerdings in meinem Set zwei mal das Test-Objekt
mit ein und dem selben hashcode drin stecken. Wo ist hier mein
Denkfehler bzw. wie sorge ich dafür, dass ein Objekt mit dem gleichen
Hashwert nicht nochmal in mein Set hinzugefügt wird?
ich war bisher der Annahme, dass beim Aufruf der Methode
Java:
java.util.HashSet.add(Object obj)
Java:
public int hashCode()
Ich habe hierzu folgende Testklasse implementiert:
Java:
public class Test {
/**
*
*/
private Set<String> words = null;
/**
*
* @param word
*/
public Test(Set<String> words) {
this.words = words;
}
@Override
public int hashCode() {
int hash = 5;
hash = 89 * hash + this.words.hashCode();
return hash;
}
@Override
public String toString() {
String result = "";
result = result + words.toString();
return result;
}
}
Jetzt möchte ich zwei Instanzen der Klasse Test erzeugen und in
ein HashSet packen. Ich sorge dafür, dass beide Klassen die gleichen
Elemente in ihrer Collection stehen haben, der entstehende hashcode
also gleich sein müsste:
Java:
public class TestMain {
public static void main(String[] args) {
Set<String> temp = new HashSet<String>();
temp.add("Das");
temp.add("ist");
temp.add("ein");
temp.add("Test");
Test test1 = new Test(temp);
Test test2 = new Test(temp);
System.out.println("Hashwert: " + test1.hashCode());
System.out.println("Hashwert: " + test2.hashCode());
Set<Test> testSet = new HashSet<Test>();
testSet.add(test1);
testSet.add(test2);
for(Test test : testSet) {
System.out.println(test);
}
}
}
Nun habe ich allerdings in meinem Set zwei mal das Test-Objekt
mit ein und dem selben hashcode drin stecken. Wo ist hier mein
Denkfehler bzw. wie sorge ich dafür, dass ein Objekt mit dem gleichen
Hashwert nicht nochmal in mein Set hinzugefügt wird?
Code:
Hashwert: 2877113
Hashwert: 2877113
[Test, Das, ein, ist]
[Test, Das, ein, ist]