2010-04-13 6 views
8

Quando si implementa compareTo(), il grado di "differenza" deve essere preso in considerazione?Il numero intero con segno specifico è importante quando si implementa il confronto in una classe Comparabile <Type>?

Ad esempio, se ho 3 oggetti, C1, C2 e C3, tale che C1 < C2 < C3.

In caso C1.compareTo (C2) restituisca un numero intero inferiore a C2.compareTo (C3)?

La documentazione per l'interfaccia Comparable non sembra specificare in un modo o nell'altro, quindi immagino che il grado non contenga, ma sarebbe bello sapere se c'è qualche vantaggio nel restituire un numero specifico (ad esempio, migliorare la velocità di ordinamento TreeSet o qualcosa del genere).

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

+0

+1 Interessante domanda – whiskeysierra

risposta

4

Interessante domanda, ma nondimeno, la grandezza dello int non ha alcun significato secondo le specifiche Comparable<T> e Comparator<T>, solo il segno. È plausibile che alcuni algoritmi di ordinamento possano inoltre specificare che possono prendere "suggerimenti" dalla grandezza, ma non sono sicuro di quanto sarebbe pratico per l'ordinamento basato sul confronto, poiché è necessario solo sapere se a < b, a == b o a > b (che è veramente ciò che Comparable e Comparator sono astrazioni OOP di).


Ora ha bisogno di essere detto che ci possono essere un'intenzione nascosta qui di utilizzare il linguaggio di sottrazione per il confronto di valori numerici, vale a dire qualcosa di simile:

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

Do atto che questo metodo di confronto è potenzialmente rotto, a causa di un possibile overflow quando la differenza tra i due numeri è maggiore di Integer.MAX_VALUE. In realtà, questo è uno dei puzzle coperti in Java Puzzlers.

Per illustrare, si consideri il seguente frammento (tratto dal libro):

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

Chiaramente x < z, eppure x - z è un numero positivo. Fai attenzione all'utilizzo di questo linguaggio di sottrazione: è sempre molto più sicuro fare un confronto esplicito e return -1, 0 o 1.

2

no, l'unica differenza è tra numeri negativi, 0, e numeri positivi. il grado è irrilevante.

Problemi correlati