Java vergleicht generische Typen

In Java habe ich eine Binary Search Tree-Klasse geschrieben, die Knoten mithilfe von Rekursion hinzufügt. Jetzt möchte ich es mit Generics verallgemeinern, damit ich mehr über sie erfahren kann.

public class GBinNode<T> {
    T item;
    GBinNode<T> left;
    GBinNode<T> right;

public GBinNode(T newItem) {
    item = newItem;
    left = null;
    right = null;
    }
public GBinNode(T it, GBinNode<T> le, GBinNode<T> ri) {
    item = it;
    left = le;
    right = ri;
    }
public String toString() {
    return item.toString()+" ";
    }
}

Meine Funktion zum Hinzufügen von Knoten ist in der folgenden Klasse

public class GBinTree<T extends Comparable <T>> {
  GBinNode<T> add(T item, GBinNode<T> bn) {
    if (bn==null) {
        return new GBinNode<T>(item, null, null);
    }
    if (item < bn.item) {        // ERROR HERE
        bn.left = add( item, bn.left);
    }
    else {
        bn.right = add( item, bn.right);
    }
    return bn;
}

public void toString(GBinNode<T> root) {
    GBinNode<T> curr = root;
    if (curr == null)
        return;
    else {
        toString(curr.left);
        System.out.println(curr.toString());    // inorder traversal
        toString(curr.right);
    }
}

Die Hauptklasse hat den folgenden Code, um die Dinge anzukurbeln. Ich verwende Zeichenfolgen, aber der Datentyp könnte ein komplexer Typ sein.

GBinTree<String> bt = new GBinTree<String>();
    GBinNode<String> root = null;
    root = bt.add("Calex", root);
    root = bt.add("Ealex", root);
    root = bt.add("Balex", root);
    root = bt.add("Dalex", root);       
    bt.toString(root);

Ich habe angefangen, die Comparable-Schnittstelle zu verwenden, aber wie schreibe ich dann die CompareTo () -Funktion? Ich weiß nicht, was für ein Typ T sein wird? Der Fehler, den ich bekam, war "Der Operator <ist für die Argumenttypen T, T undefiniert".

Auf der Suche nach einer Lösung gab es eine AntwortVergleich generischer Java-Typen:

class Element<T extends Comparable<T>>

Ich verstehe nicht, wohin das führen soll und wie es sich von der Klasse unterscheidet, die Comparable implementiert. Der einzige Ort, an dem ich weiß, dass der Typ in der Hauptklasse liegt, sollte also die compareTo () vorhanden sein? Ich habe mir überlegt, GBinTree zu einer Benutzeroberfläche zu machen, bin aber verwirrt, ob das der richtige Weg ist. Jede Hilfe wäre dankbar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage