Interface Comparable<T>

javamanki

Mitglied
Liebe Java-Profis, ich hänge zur Zeit an folgender aufgabe:
Ich muss eine Klasse implementieren, die das Heap-Sort-Verfahren realisiert, das dürfte nicht das Problem sein. Die eigentliche Schwierigkeit für mich ist, dass die Elemente des Baums den generischen Typ <T> haben und ich das Vergleichen der einzelnen Werte mithilfe der CompareTo-Methode durchführen muss.
In der Aufgabe steht:
Die Klasse soll einen generischen Parameter T besitzen, wobei sichergestellt sein muss, dass T das Interface Comparable implementiert.
Wie soll ich die Kopfzeile benennen?
public class HeapSort<T implements Comparable<T>> ?
Weitere Frage, wie kann ich die CompareTo Methode programmieren? Muss ich dazu java.util importieren oder kann ich die Werte direkt mit einer istGrößer-Abfrage vergleichen? , also z.B.
return getValue()>obj.getValue() ? 1
In der Aufgabe steht leider nicht so viel dazu.
 

httpdigest

Top Contributor
Wie soll ich die Kopfzeile benennen?
public class HeapSort<T implements Comparable<T>> ?
Fast: Korrekt wäre: public class HeapSort<T extends Comparable<T>>
Siehe hierzu auch: https://docs.oracle.com/javase/tutorial/java/generics/bounded.html

Weitere Frage, wie kann ich die CompareTo Methode programmieren? Muss ich dazu java.util importieren oder kann ich die Werte direkt mit einer istGrößer-Abfrage vergleichen? , also z.B.
return getValue()>obj.getValue() ? 1
Die compareTo-Methode wird vom Interface Comparable (welches ja T implementieren muss) bereitgestellt.
Deine T's haben dann also eine compareTo()-Methode, die du auf ihnen aufrufen kannst.
Das ist ja gerade der ganze Sinn davon, dass deine T's Comparable implementieren sollen, weil sie nur so verglichen werden können.
Also, dein Sortieralgorithmus wird ja irgendwann zwei T's miteinander vergleichen wollen, und dann kannst du machen:
Java:
T t1 = ...;
T t2 = ...;
if (t1.compareTo(t2) < 0) {
  // t1 ist _echt_ kleiner als t2
}
 

javamanki

Mitglied
Fast: Korrekt wäre: public class HeapSort<T extends Comparable<T>>
Siehe hierzu auch: https://docs.oracle.com/javase/tutorial/java/generics/bounded.html


Die compareTo-Methode wird vom Interface Comparable (welches ja T implementieren muss) bereitgestellt.
Deine T's haben dann also eine compareTo()-Methode, die du auf ihnen aufrufen kannst.
Das ist ja gerade der ganze Sinn davon, dass deine T's Comparable implementieren sollen, weil sie nur so verglichen werden können.
Also, dein Sortieralgorithmus wird ja irgendwann zwei T's miteinander vergleichen wollen, und dann kannst du machen:
Java:
T t1 = ...;
T t2 = ...;
if (t1.compareTo(t2) < 0) {
  // t1 ist _echt_ kleiner als t2
}
Okay, vielen Dank, verstehe. Muss ich dann zusätzlich eine Klasse für das Interface programmieren oder passiert das irgendwie automatisch in Java?
 

javamanki

Mitglied
Fast: Korrekt wäre: public class HeapSort<T extends Comparable<T>>
Siehe hierzu auch: https://docs.oracle.com/javase/tutorial/java/generics/bounded.html


Die compareTo-Methode wird vom Interface Comparable (welches ja T implementieren muss) bereitgestellt.
Deine T's haben dann also eine compareTo()-Methode, die du auf ihnen aufrufen kannst.
Das ist ja gerade der ganze Sinn davon, dass deine T's Comparable implementieren sollen, weil sie nur so verglichen werden können.
Also, dein Sortieralgorithmus wird ja irgendwann zwei T's miteinander vergleichen wollen, und dann kannst du machen:
Java:
T t1 = ...;
T t2 = ...;
if (t1.compareTo(t2) < 0) {
  // t1 ist _echt_ kleiner als t2
}
Sorry, glaube habe mich falsch ausgedrückt. Passiert die Vererbung automatisch, oder muss ich diese Klasse Comparable<T> ebenfalls ausprogrammieren? Hoffe, Du verstehst was ich meine.
 

KonradN

Super-Moderator
Mitarbeiter
Sorry, glaube habe mich falsch ausgedrückt. Passiert die Vererbung automatisch, oder muss ich diese Klasse Comparable<T> ebenfalls ausprogrammieren? Hoffe, Du verstehst was ich meine.
Du musst bei deiner HeapSort Klasse gar nichts implementieren. Der Typ, der angegeben wird, der muss es aber tun.

Wenn Du also eine eigene Klasse hast, dessen Instanzen Du in Deinem HeapSprt sortieren willst, dann muss Deine Klasse dies auch implementieren.
 

javamanki

Mitglied
Du musst bei deiner HeapSort Klasse gar nichts implementieren. Der Typ, der angegeben wird, der muss es aber tun.

Wenn Du also eine eigene Klasse hast, dessen Instanzen Du in Deinem HeapSprt sortieren willst, dann muss Deine Klasse dies auch implementieren.
Ich verstehe nicht ganz was Du meinst. Ich habe jetzt die CompareTo-Methode folgendermaßen implementiert:
Code:
public <T> int CompareTo(int i, int j){
        T t1 = knoten[i];
        T t2 = knoten[j];

        if (t1.CompareTo(t2)>0) {
            return -1;
        } else if (t1.CompareTo(t2)<0) {
            return 1;
        } else return 0;
    }
 

KonradN

Super-Moderator
Mitarbeiter
HeapSort erwartet, dass Du einen Typ angibst, der Comparable implementiert.

HeapSort implementiert das CompareTo nicht! Und Deine Implementierung ist einfach nur Quatsch! Comparable<T> müsste eine Methode
int CompareTo(T o1, T o2);
implementieren.

Der Code, den Du da zeigst:
a) implementiert kein Compareable
b) Erzeigt einen eigenen Generic T - so der COmpiler nicht meckert wäre dies auch noch ein anderer Typ als das T der Klasse.

Aber noch einmal ganz klar und deutlich: Dein HeapSort muss kein Compatable implementiert. Das ist eine Anforderung später an die Verwendung der Klasse HeapSort.
 

javamanki

Mitglied
HeapSort erwartet, dass Du einen Typ angibst, der Comparable implementiert.

HeapSort implementiert das CompareTo nicht! Und Deine Implementierung ist einfach nur Quatsch! Comparable<T> müsste eine Methode
int CompareTo(T o1, T o2);
implementieren.

Der Code, den Du da zeigst:
a) implementiert kein Compareable
b) Erzeigt einen eigenen Generic T - so der COmpiler nicht meckert wäre dies auch noch ein anderer Typ als das T der Klasse.

Aber noch einmal ganz klar und deutlich: Dein HeapSort muss kein Compatable implementiert. Das ist eine Anforderung später an die Verwendung der Klasse HeapSort.
Heißt, ich muss die CompareTo Methode nicht ausprogrammieren, sondern meine T's tun es bereits...? Ich kann also auf meine T's die CompareTo-Methode aufrufen? t1.compareTo(t2) wobei t1 und t2 T's sind.
 

LimDul

Top Contributor
Heißt, ich muss die CompareTo Methode nicht ausprogrammieren, sondern meine T's tun es bereits...? Ich kann also auf meine T's die CompareTo-Methode aufrufen? t1.compareTo(t2) wobei t1 und t2 T's sind.
Genau. Mit der Generics Definition sagst du:
T kann ein beliebiger Typ sein. Einzige Bedingung ist, dass T das Interface Comparable implementieren muss. Dementsprechend ist das einzige, was du bzgl. T weißt, dass es auf jeden Fall die Methode compareTo(T other) implementiert.
 

temi

Top Contributor
Heißt, ich muss die CompareTo Methode nicht ausprogrammieren, sondern meine T's tun es bereits...? Ich kann also auf meine T's die CompareTo-Methode aufrufen? t1.compareTo(t2) wobei t1 und t2 T's sind.
Richtig. Du kannst an deine Klasse als T alles übergeben, was Comparable implementiert.

Schau dir z. B. die Klasse String an https://docs.oracle.com/javase/8/docs/api/java/lang/String.html

Oben siehst du unter "All implemented Interfaces", dass String Comparable implementiert. Du kannst also deinen HeapSort Klasse direkt mit String verwenden: HeapSort<String> stringSorter = new HeapSort<>();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Abstrakt oder Interface Java Basics - Anfänger-Themen 3
Say public/default Interface Java Basics - Anfänger-Themen 9
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
I Browser integriert in Desktop Applikation - Webcam interface not found Java Basics - Anfänger-Themen 26
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
U Interface | constructor injection Java Basics - Anfänger-Themen 5
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
I JSON und Interface Java Basics - Anfänger-Themen 3
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
L Interface & Comparable Java Basics - Anfänger-Themen 15
T Interface Java Basics - Anfänger-Themen 0
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
A Interface Kuddelmuddel Java Basics - Anfänger-Themen 4
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
H abstract und interface Java Basics - Anfänger-Themen 4
F Interface Casting Java Basics - Anfänger-Themen 13
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Interface Java Basics - Anfänger-Themen 2
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
B Interface vs Abstract Java Basics - Anfänger-Themen 2
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
J Vererbung Abstrake Klasse <-> Interface Java Basics - Anfänger-Themen 5
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
N Interface Interface Erstellung Java Basics - Anfänger-Themen 3
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
K Interface: wie damit arbeiten Java Basics - Anfänger-Themen 4
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
T Vererbung Interface Java Basics - Anfänger-Themen 5
F Interface aus anderem Package nutzen Java Basics - Anfänger-Themen 10
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
B Erste Schritte Wie definiere ich in Java ein Interface? Java Basics - Anfänger-Themen 6
L OOP Interface Prinzip? Java Basics - Anfänger-Themen 6
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
J Innerhalb Interfacemethode: Interface als Attribut Java Basics - Anfänger-Themen 2
A Frage zu Interface Java Basics - Anfänger-Themen 16
J Interface Java Basics - Anfänger-Themen 3
W Interface Java Basics - Anfänger-Themen 1
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
Shams Kann man von einem Interface aus auf die dieses implementierende Klasse zugreifen? Java Basics - Anfänger-Themen 4
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Interface-Methode abrufen? Java Basics - Anfänger-Themen 2
P Vererbung Klasse erbt von abstrakter Klasse implementiert Interface Java Basics - Anfänger-Themen 2
M Konstanten in einem Interface definieren Java Basics - Anfänger-Themen 1
P interface Java Basics - Anfänger-Themen 1
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
M Interface als Datentyp Java Basics - Anfänger-Themen 12
K Interface Methoden überschreiben Java Basics - Anfänger-Themen 1
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
A Interface in Collection (Liste) angeben Java Basics - Anfänger-Themen 2
G Interface klasse Java Basics - Anfänger-Themen 4
N Interface Interface (sinnvoll) erzeugen Java Basics - Anfänger-Themen 8
D Interface namen bekommen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben