M
max_07
Gast
Ich wollte ein paar Punkt-Objekte in ein HashSet einfügen und war davon überzeugt, die Punkt-Objekte, die ich mehrfach eingefügt habe, nur einmal zu sehen. Leider haben sich meine Erwartungen nicht bewahrheitet. Hier die Klasse Punkt:
Und hier noch der Testcode:
Ich habe erwartet, dass die Instanz (10, 20) nur einmal angezeigt wird. Was mach ich falsch? Ich hätte gedacht, dass vor dem Einfügen in das HashSet ein Vergleich angestellt wird, wobei die Methoden 'equals' einbezogen wird.
Danke.
Code:
class Punkt
{
private int x, y;
public Punkt(int x, int y)
{
this.x = x; this.y = y;
}
public String toString()
{
return "x = " + x + ", y = " + y;
}
public boolean equals(Object o)
{
if (o == this) return true;
else if (!(o instanceof Punkt)) return false;
else
{
Punkt p = (Punkt)o;
return x == p.x && y == p.y;
}
}
}
Und hier noch der Testcode:
Code:
HashSet<Punkt> hSet = new HashSet<Punkt>();
hSet.add(new Punkt(10, 20));
hSet.add(new Punkt(30, 300));
hSet.add(new Punkt(10, 20));
Iterator it = hSet.iterator();
while(it.hasNext())
{
System.out.println(it.next().toString());
}
Ich habe erwartet, dass die Instanz (10, 20) nur einmal angezeigt wird. Was mach ich falsch? Ich hätte gedacht, dass vor dem Einfügen in das HashSet ein Vergleich angestellt wird, wobei die Methoden 'equals' einbezogen wird.
Danke.