M
mike
Gast
Hallo,
ich möchte in meinem Programm eine Set-Klasse verwenden (egal welche: HashSet,TreeSet), um darin Objekte zu speichern, und zwar so, dass kein Objekt doppelt vorkommen kann. Die Set-Klassen machen dass ja automatisch, man muss nur eine equals-Methode schreiben, mit der ein Set seine Objekte vergleichen kann.
Genau daran liegt mein Problem. Wie kann ich dem Set weismachen, wo (in welcher Klasse) er nach der equals-Methode suchen muss, denn ein Set weiss ja nicht, Objekte welcher Klasse es enthält?
Gibt es eine Möglichkeit, dass irgendwie zu machen, oder muss ich meine eigene Set-Klasse schreiben? Wenn ja, wie mache ich dann am besten (am effizientesten) die add()-Methode?
Habe ein kleines Beispielprogramm geschrieben, dass mein Problem verdeutlicht:
gruß mike
ich möchte in meinem Programm eine Set-Klasse verwenden (egal welche: HashSet,TreeSet), um darin Objekte zu speichern, und zwar so, dass kein Objekt doppelt vorkommen kann. Die Set-Klassen machen dass ja automatisch, man muss nur eine equals-Methode schreiben, mit der ein Set seine Objekte vergleichen kann.
Genau daran liegt mein Problem. Wie kann ich dem Set weismachen, wo (in welcher Klasse) er nach der equals-Methode suchen muss, denn ein Set weiss ja nicht, Objekte welcher Klasse es enthält?
Gibt es eine Möglichkeit, dass irgendwie zu machen, oder muss ich meine eigene Set-Klasse schreiben? Wenn ja, wie mache ich dann am besten (am effizientesten) die add()-Methode?
Habe ein kleines Beispielprogramm geschrieben, dass mein Problem verdeutlicht:
Code:
import java.util.*;
public class setTest
{
private static Set players;
public static void main(String args[])
{
// player objects
Player pl1 = new Player("alex");
Player pl2 = new Player("tom");
Player pl3 = new Player("alex");
// add to set
players = new HashSet();
players.add(pl1);
players.add(pl2);
players.add(pl3);
// prints
Iterator it = players.iterator();
while (it.hasNext())
{
System.out.println(((Player)it.next()).getName());
}
// testen, ob equals funktioniert
System.out.println();
System.out.println(pl1.equals(pl3));
}
}
class Player
{
private String name;
public Player(String n)
{
name = n;
}
protected String getName()
{
return name;
}
public boolean equals(Object pl2)
{
return this.getName().equals(((Player)pl2).getName());
}
}
gruß mike