2010-04-13 17 views
8

Wenn compareTo() implementiert wird, muss der Grad der "Differenz" berücksichtigt werden?Ist die spezifische Ganzzahl mit Vorzeichen wichtig, wenn compareTo in einer Comparable <Type> Klasse implementiert wird?

Zum Beispiel, wenn ich 3 Objekte habe, C1, C2 und C3, so dass C1 < C2 < C3.

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

Die Dokumentation für die vergleichbare Schnittstelle scheint nicht eine oder andere Weise zu bestimmen, so dass der Grad Ich vermute, spielt keine Rolle, aber es wäre schön zu wissen, ob einige Vorteile gibt es eine bestimmte Anzahl Rückkehr (zum Beispiel, TreeSet Sortiergeschwindigkeit oder etwas zu verbessern).

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html#compareTo(T)

+0

+1 Interessante Frage – whiskeysierra

Antwort

4

Interessante Frage, aber nichtsdestotrotz hat die Größenordnung der int keine Bedeutung wie Comparable<T> und Comparator<T> Spezifikationen, nur das Zeichen. 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 nur wissen müssen, ob a < b, a == b oder a > b (was ist wirklich was Comparable und Comparator sind OOP Abstraktionen von).


Jetzt muss gesagt werden, dass es hier eine versteckte Absicht sein kann, die Subtraktion Idiom mit numerischen Werten zu vergleichen, also etwa so:

public int compare(T t1, T t2) { 
    return t1.intField - t2.intField; 
} 

beachten Sie, dass diese Vergleichsmethode ist potenziell defekt, aufgrund eines möglichen Überlaufs, wenn der Unterschied zwischen den beiden Zahlen größer als Integer.MAX_VALUE ist. In der Tat ist dies eines der Rätsel in Java Puzzlers abgedeckt.

Um zu demonstrieren, betrachten Sie das folgende Snippet (aus dem Buch):

int x = -2000000000; 
int z = 2000000000; 
System.out.println(x - z); // prints a positive number due to overflow 

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

2

Nein, ist der einzige Unterschied zwischen dem negativen Zahlen, 0 und positiven Zahlen. der Abschluss ist irrelevant.