Interface Comparable

Aibo

Mitglied
Hallo liebes Java-Forum,

ich möchte besonders den Anfängern das Interface Comparable näher erläutern. Dazu habe ich eine Beispielklasse erstellt und diese sehr einfach gehalten. Das Interface bietet sehr viel mehr Möglichkeiten als hier besprochen wird.

Das Interface Comparable (aus dem Paket java.lang) dient dazu, Objekte miteinander zu vergleichen und ist folgendermaßen aufgebaut.

Java:
public interface Comparable
{
public int compareTo(Object o);
}

Dieses Interface kann von Klassen implementiert werden, deren Objekte paarweise vergleichbar sind.

Die Methode compareTo(Object o) liefert einen int-Wert (Integer) zurück. Dieser Integer kann drei Werte beschreiben.

1. Rückgabewert: kleiner 0 wenn das Objekt "kleiner" ist.
2. Rückgabewert: größer 0 wenn das Objekt "größer" ist.
3. Rückgabewert: gleich 0 wenn das Objekt gleich ist.

Nicht schlimm wenn ihr es bis hier noch nicht ganz versteht. Ich möchte das Verständnis mit folgendem Beispiel vervollständigen.

Beispiel:

Java:
public class InterfaceProgram implements Comparable
{
	public  int value1;
	public  int value2 = 20;

	public InterfaceProgram(int value1)
	{
		this.value1 = value1;
	}


	public int compareTo(Object o)
	{
		if( ((InterfaceProgram)o).value1 > value2) // Das Objekt muss einem Casting unterlaufen,
		{										   // damit o auf die Instanzvariablen der Klasse "InterfaceProgram" zugreifen kann.
			System.out.println("Objektvariable ist groesser!");
			return 1;
		}
		else if(((InterfaceProgram)o).value1 < value2)
		{
			System.out.println("Objekvariable ist kleiner!");
			return -1;
		}
		else
		{
			System.out.println("Objektvariable ist gleich gross!");
			return 0;
		}

	}

	public static void main(String[] args)
	{
		InterfaceProgram demo = new InterfaceProgram(10);
		System.out.println(demo.compareTo(demo) ); // Ausgabe: Objektvariable ist kleiner
												   //          -1

		demo.value1 = 20;
		System.out.println(demo.compareTo(demo) ); // Ausgabe: Objektvariable ist gleich gross
												   //   	    0

		demo.value1 = 30;
		System.out.println(demo.compareTo(demo) );// Ausgabe: Objektvariable ist groesser
												   //   	    1
	}
}

Vielleicht ist es noch etwas schwierig nachzuvollziehen besonders für Anfänger. Deshalb könnte vielleicht folgende Übung helfen dieses Konzept besser zu verstehen.

Übung:

Erstelle eine Klasse Computer, welches das Interface Comparable implementiert.
In dieser Klasse sollen zwei Eigenschaften enthalten sein: "hersteller", "arbeitsspeicher".
Vergleicht beide Computer-Objekte auf den "arbeitsspeicher" und entscheidet was passieren soll, wenn ein Computer-Objekt einen größeren Arbeitsspeicher enthält als das zu vergleichende Objekt.
Experementiert viel mit dem Code herum und implementiert ggf. ein weiteres interface welches den "hersteller" der Computer-Objekte zurückgibt.
 

xehpuk

Top Contributor
  1. Generics?
    Comparable sieht so aus:
    Java:
    public interface Comparable<T> {
    	int compareTo(T o);
    }
  2. Dein Beispiel ist leider sehr schlecht. Wenn man ein Objekt mit sich selbst vergleicht, sollte immer 0 herauskommen. Man vergleicht auch nicht unterschiedliche Instanzvariablen miteinander.
 

Landei

Top Contributor
Welche Java-Version verwendest du? 1.4?

Seit der Einführung von Generics ist Comparable so definiert:

Java:
public interface Comparable<T> {
   public int compareTo(T o);
}

Comparable (Java Platform SE 7 )

Dabei ist der generische Parameter in diesem Fall fast immer die "eigene", implementierende Klasse (eine der wenigen Ausnahmen wäre [c]class java.sql.Timesstamp implements Comparable<java.util.Date>[/c]). Ist auch logisch: Wer will schon Äpfel mit Birnen vergleichen?
 

tuttle64

Bekanntes Mitglied
Die Interfaces Comparable und Comparator werden üblicherweise verwendet um eine collection nach eigenen Attributen zu sortieren.
 

Neue Themen


Oben