Wrapperklassen-Vergleiche durchführen mit compare() und compareTo()
1 Kommentar(e). Veröffentlicht von Christian Ullenboom am Montag, November 02, 2009.
Haben wie zwei Ganzzahlen 1 und 2 vor uns, so ist es trivial zu sagen, dass 1 kleiner 2 ist. Bei Fließkommazahlen ist das ein wenig komplizierter, da es hier „Sonderzahlen“ wie Unendlich oder eine negative bzw. positive null gibt. Da insbesondere Vergleichsalgorithmen die Beantwortung der Frage, ob zwei Werte a und b kleiner, größer oder gleich sind, erwarten, gibt es zwei Typen von Methoden in den Wrapper-Klassen.
· Sie implementieren eine Objektmethode compareTo(). Die Methode ist nicht zufällig da, denn Wrapper-Klassen implementieren die Schnittstelle Comparable. (Wir haben die Schnittstelle schon im Kapitel 6 kurz vorgestellt.)
· Wrapper-Klassen besitzen statische compare()-Methoden.
Die Rückgabe der Methoden ist ein int und es kodiert, ob ein Wert größer, kleiner oder gleich ist.
Beispiel Teste verschiedene Werte.
System.out.println( Integer.compare(1, 2) ); // -1
System.out.println( Integer.compare(1, 1) ); // 0
System.out.println( Integer.compare(2, 1) ); // 1
System.out.println( Double.compare(2.0, 2.1) ); // -1
System.out.println( Double.compare(Double.NaN, 0) );// 1
System.out.println( Boolean.compare(true, false) ); // 1
System.out.println( Boolean.compare(false, true) ); // -1
Ein true ist „größer“ als als false.
Die Tabelle fasst von den Wrapper-Klassen die Methoden zusammen.
Klasse Methode aus Comparable Statische Methode compare()
Byte int compareTo(Byte anotherByte) int compare(int x, int y)
Short int compareTo(Short anotherShort) int compare(short x, short y)
Float int compareTo(Float anotherFloat) int compare(float f1, float f2)
Double int compareTo(Double anotherDouble) int compare(double d1, double d2)
Integer int compareTo(Integer anotherInteger) int compare(int x, int y)
Long int compareTo(Long anotherLong) int compare(long x, long y)
Character int compareTo(Character anotherCharacter) int compare(char x, char y)
Boolean int compareTo(Boolean b) int compare(boolean x, boolean y)
Die Implementierung einer statischen Methode WrapperKlasse.compare() ist äquivalent zu WrapperKlasse.valueOf(x).compareTo(WrapperKlasse.valueOf(y)).
Die Klassen BigInteger, BigDecimal implementieren zwar Number und somit Comparable, aber eine statische compare()-Methode bieten sie nicht. Auch String implementiert Comparable, aber eine statische Methode fehlt. Der Grund ist, dass es eine statische Methode Objects.compare() gibt, zwei Objekte mit einem Comperator vergleicht.
· Sie implementieren eine Objektmethode compareTo(). Die Methode ist nicht zufällig da, denn Wrapper-Klassen implementieren die Schnittstelle Comparable. (Wir haben die Schnittstelle schon im Kapitel 6 kurz vorgestellt.)
· Wrapper-Klassen besitzen statische compare()-Methoden.
Die Rückgabe der Methoden ist ein int und es kodiert, ob ein Wert größer, kleiner oder gleich ist.
Beispiel Teste verschiedene Werte.
System.out.println( Integer.compare(1, 2) ); // -1
System.out.println( Integer.compare(1, 1) ); // 0
System.out.println( Integer.compare(2, 1) ); // 1
System.out.println( Double.compare(2.0, 2.1) ); // -1
System.out.println( Double.compare(Double.NaN, 0) );// 1
System.out.println( Boolean.compare(true, false) ); // 1
System.out.println( Boolean.compare(false, true) ); // -1
Ein true ist „größer“ als als false.
Die Tabelle fasst von den Wrapper-Klassen die Methoden zusammen.
Klasse Methode aus Comparable Statische Methode compare()
Byte int compareTo(Byte anotherByte) int compare(int x, int y)
Short int compareTo(Short anotherShort) int compare(short x, short y)
Float int compareTo(Float anotherFloat) int compare(float f1, float f2)
Double int compareTo(Double anotherDouble) int compare(double d1, double d2)
Integer int compareTo(Integer anotherInteger) int compare(int x, int y)
Long int compareTo(Long anotherLong) int compare(long x, long y)
Character int compareTo(Character anotherCharacter) int compare(char x, char y)
Boolean int compareTo(Boolean b) int compare(boolean x, boolean y)
Die Implementierung einer statischen Methode WrapperKlasse.compare() ist äquivalent zu WrapperKlasse.valueOf(x).compareTo(WrapperKlasse.valueOf(y)).
Die Klassen BigInteger, BigDecimal implementieren zwar Number und somit Comparable, aber eine statische compare()-Methode bieten sie nicht. Auch String implementiert Comparable, aber eine statische Methode fehlt. Der Grund ist, dass es eine statische Methode Objects.compare() gibt, zwei Objekte mit einem Comperator vergleicht.

Hey Christian,
dein Timing ist hervorragend, da ich mich gerade wieder mit NumberWrapperKlassen beschäftige, um diese vergleichbar zu machen. Klingt als wäre das machbar ;).
Grüße,
Marcus