Java - CompareTo Methode erweitern

Guten Tag,

im Rahmen einer Informatikübungsaufgabe sollen wir verschiedene Sortieralgorithmen bezüglich ihrer durchgeführten Vergleiche vergleichen.

Dafür sollen wir jedes mal, wenn die Methode compareTo (Integer Objekte) einen Counter erhöhen.
Nun frage ich mich ob es z.B. durch ein Override in der Oberklasse möglich ist den Counter direkt in die CompareTo Methode einzubetten.
So müssten die Counter nicht im Programmtext der Sortieralgorithmen stehen.

Vielen Dank für eure Hilfe.

Benjamin Knauer

Hallo,

für mich klingt das eher nach einem Anwendungsfall für einen Decorator:
Ein eigener CountingComparator, der das Zählen übernimmt und dann compareTo einfach an den echten Comparator weiterleitet. Bzw in diesem Fall kannst Du dann sogar einfach compareTo auf die Objekte aufrufen.

Mit Override ginge es prinzipiell auch, dafür müsstest Du aber vom echten Comparator ableiten und compareTo dann an super delegieren. Auf diese Art benötigst Du für jeden Comparator eine neue Subklasse. Mit dem Decorator geht das einmalig.

Und dem Sortieralgorithmus dann einfach den Comparator übergeben, dann bekommt er gar nix davon mit, dass hier gezählt wird.

lg und viel Erfolg mit der Übung,
Heinz

Hi Benjamin,

erstelle eine Klasse namens zb „MyString“ und überschreibe dort die toString()-Methode. Erstelle in dieser Klasse eine Variable, die du dann in der Methode hochzählst.
Dann kannst du noch eine getCount()-Methode erstellen, mit der du den aktuellen Counter-Stand ermitteln kannst.

Grüße
Rene

Hallo Benjamin,

vielleicht verstehe ich das Problem nicht zur Gänze, aber

a) java.lang.Integer ist eine final Klasse, kann also nicht erweitert oder überladen werden. Wenn also unbedingt Integer Klassen verglichen werden sollen, muss der Counter in den/die Sortieralgorithmen eingebaut werden. Dazu fehlt mir dann die weitere Info.

b) Wenn die zu vergleichenden Objekte auch was eigenes sein können, dann einfach in die Klasse ein statisches Feld (static int compareCounter) und in der compareTo() methode inkrementieren.
Ich gehe dabei davon aus, dass die Gesamtheit der compareTo() Aufrufe gezählt werden soll. (Counter dann nach dem Sortieren zurücksetzen)

Gruß,
Tomasz_Doolittle