Hallo,
ich möchte einen Vektor sortieren und habe dabei ein Problem. Ich muß es mithilfe Comparable machen.
Ich deklariere eine Klasse
class Person implements Comparable {
Dann deklariere ich halt die Methode public int compareTo.
In dieser klasse werden die Werte -1, 1 bzw. 0 zurückgegeben.
Der Vektor, den ich sortieren möchte, heißt Alter und ist in einer Subklasse von Person angelegt. Wie kann ich von Person aus jetzt die Funktion compareto aufrufen???
Danke,
Markus.
Ich verstehe nicht ganz... also was befindet sich in "Alter"? Personen?
Egal, nehmen wir an, in alter befinden sich Objekte des Types XYZ. Dann muss XYZ Comparable implementieren (class XYZ extends Comparable{...), und das wars eigentlich schon.
Das Interface Comparable sorgt jetzt dafür, dass es für XYZ eine eindeutige Ordnung gibt, und wann immer irgendeine Algorithmus rausfinden muss, ob z.B. a < b ist, ruft er a.compareTo( b ) < 0 auf...
Da du den Sortier-Algorithmus nicht selbst schreiben musst, musst du auch nie die compareTo aufrufen.
Hingegen musst du "Collections.sort" mit deinem Vektor Alter als Argument aufrufen (das wird den Vektor sortieren).
Danke, ich fürchte, ich habe die Frage nicht gut gestellt, weil ich im Moment wirklich gar nichts verstehe. Also, der Vektor heisst natürlich Studentenliste oder so. Und in dem Vektor sind Studenten mit verschiedenen Altern. Ich moechte den Vektor jetzt dem Alter nach sortieren.
Dafür habe ich in der Superklasse Person folgendes deklariert:
Code:
public int compareTo(Object arg) throws ClassCastException {
if (arg instanceof Person) {
Person a= (Person) arg;
if (this.alter<a.alter) {
return -1;
}
else if(this.alter>a.alter) {
return 1;
}
else {
return 0;
}
}
else {
throw (new ClassCastException());
}
Wie kann ich nun veranlassen, daß die Methode compareto auch wirklich die Studenten (Subklasse) nach dem Alter sortiert?
Muß ich die Methode denn nicht aufrufen?
Nein, du musst den Sortieralgorithmus aufrufen. Dieser wird dann schon dafür sorgen, dass er an seine Informationen kommt (mit der Methode compareTo, die du für ihn ja freundlicherweise geschrieben hast).
Als Beispiel
Code:
Vector studenten = new Vector();
studenten .add( new Student( 18 ));
studenten .add( new Student( 22 ));
studenten .add( new Student( 19 ));
Collections.sort( studenten );
// jetzt sind sie sortiert
Ich habe mich hier zu dem Thema durchgewühlt, ich möchte gern einen Vektor von Konten sortieren und zwar je nach Bedarf nach Nummern oder nach namen....wenn ich die Methode compareTo überschreibe um den Vector nach Namen zu sortieren....kann ich das genauso für die Nummern tun? Woher "weiß" sort() wonach es sortieren soll in diesem Fall?
In diesem Fall solltest du nicht Comparable implementieren, sondern 2 Comperatoren schreiben die du dann je nach Bedarf bei Collections#sort(List,Comparator) übergibst.
In diesem Fall solltest du nicht Comparable implementieren, sondern 2 Comperatoren schreiben die du dann je nach Bedarf bei Collections#sort(List,Comparator) übergibst.