Slyh: lexikografisch sortieren

Beitrag lesen

Hallo Philipp,

public int compare(Object e1, Object e2)
    {
        return -1 * ((Comparable)e1).compareTo(e2);
    }

Nur aus Interesse kurz eine Frage:
Warum nicht einfach "return ((Comparable)e2).compareTo(e1);"?

Weil ich soweit gar nicht gedacht habe. :-)

Ist nach Comparable dieselbe Aussage, denn

The implementor must ensure sgn(x.compareTo(y)) == -sgn(y.compareTo
(x)) for all x and y.

Völlig richtig.

aber...
a) es ist performanter

Wird wohl so sein. Dürfte in diesem konkreten Fall aber sogar
unerheblich sein, da der Vergleich von Strings erheblich langsamer
ist, als eine Multiplikation mit -1.
(Trotzdem hast du recht.)

b) es ist ggf. besser lesbar, obwohl die Lesbarkeit genau auch ein
   Faktum für "-1 * ..."  sein kann (ich könnte mir vorstellen, dass
   dies genau Dein Beweggrund war, es so zu schreiben).

Ich halte beide Versionen für gleich schlecht lesbar. :)

Letztendlich wollte ich wirklich zeigen, daß sich durch ein Umdrehen
des Vorzeichens die Sortierreihenfolge ändern läßt. Daran, daß sich
dies auch durch eine einfache Vertauschung von e1 und e2 erreichen
ließe, habe ich -- wie schon geschrieben -- in dem Moment nicht
gedacht, sonst hätte ich es zumindest noch erwähnt.

Auf jeden Fall sollte man genau dokumentieren, was in der Methode
passiert, da sowohl die Version mit "-1", als auch die Version mit
vertauschtem e1 und e2 meiner Ansicht nach erst auf den 2. Blick
verständlich wird. (Und das bei einem Einzeiler...)

Ansonsten (auch) von meiner Seite aus Danke für die schönen
Ausführungen. Immer wieder interessant von Dir zu lesen.

Danke! Das freut mich zu lesen. :-)

Gruß
Slyh