Ist die spezifische Ganzzahl mit Vorzeichen wichtig, wenn compareTo in einer Comparable Type-Klasse implementiert wird?

8

Muss bei der Implementierung von compareTo () der Grad der "Differenz" berücksichtigt werden?

Zum Beispiel, wenn ich 3 Objekte C1, C2 und C3 habe, so dass C1 & lt; C2 & lt; C3.

Soll C1.compareTo (C2) eine ganze Zahl zurückgeben, die kleiner als C2.compareTo (C3) ist?

Die Dokumentation für die Vergleichbare Schnittstelle scheint nicht auf die eine oder andere Art zu spezifizieren, also denke ich, dass der Grad keine Rolle spielt, aber es wäre schön zu wissen, ob es einen Vorteil gibt, eine bestimmte Zahl zurückzugeben (z Beispiel, Verbesserung der TreeSet-Sortiergeschwindigkeit oder etwas).

Ссылка

    
javanix 13.04.2010, 23:05
quelle

2 Antworten

4

Interessante Frage, aber nichtsdestoweniger, die Größenordnung von int hat keine Bedeutung, denn pro Comparable<T> und Comparator<T> Spezifikationen, nur das Vorzeichen. Vorstellbar ist, dass einige Sortieralgorithmen zusätzlich angeben können, dass sie "Hinweise" von der Größenordnung nehmen können, aber ich bin nicht sicher, wie praktisch das für eine vergleichsbasierte Sortierung wäre, da wir wirklich nur wissen müssen, ob a < b , a == b , oder a > b (was ist wirklich, was Comparable und Comparator sind OOP Abstraktionen von).

Nun muss gesagt werden, dass es hier vielleicht eine versteckte Absicht gibt, das Subtraktions-Idiom für den Vergleich numerischer Werte zu verwenden, also etwa so:

%Vor%

Beachten Sie, dass diese Vergleichsmethode möglicherweise aufgrund eines möglichen Überlaufs unterbrochen ist, wenn die Differenz zwischen den beiden Zahlen größer als Integer.MAX_VALUE ist. In der Tat ist dies eines der Rätsel, das in Java Puzzlers behandelt wird.

Betrachten Sie zur Veranschaulichung das folgende Snippet (aus dem Buch):

%Vor%

Offensichtlich x < z und dennoch x - z ist eine positive Zahl. Vorsicht bei der Verwendung dieses Subtraktions-Idioms: Es ist immer viel sicherer, einen expliziten Vergleich durchzuführen und stattdessen return -1 , 0 oder 1 .

    
polygenelubricants 14.04.2010, 01:28
quelle
2

nein, der einzige Unterschied besteht zwischen negativen Zahlen, 0, und positiven Zahlen. der Abschluss ist irrelevant.

    
oedo 13.04.2010 23:06
quelle

Tags und Links