Java比较generics类型

在Java中,我编写了一个二进制搜索树类,它使用递归添加节点。 现在我想使用generics来概括它,以便我可以更多地了解它们。

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

我添加节点的function在以下类中

 public class GBinTree<T extends Comparable > { GBinNode add(T item, GBinNode bn) { if (bn==null) { return new GBinNode(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 root) { GBinNode curr = root; if (curr == null) return; else { toString(curr.left); System.out.println(curr.toString()); // inorder traversal toString(curr.right); } } 

主类有以下代码来启动。 我正在使用字符串,但数据类型可能是某种复杂类型。

 GBinTree bt = new GBinTree(); GBinNode 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); 

我开始使用Comparable接口但是如何编写CompareTo()函数? 我不知道T会是什么类型的? 我得到的错误是“操作符<未定义参数类型T,T”。

搜索解决方案,一个答案是比较generics类型Java :

 class Element<T extends Comparable> 

我不明白这应该去哪里,以及它与实现Comparable的类有什么不同。 我知道类型的唯一地方是在主类中,所以compareTo()应该在那里吗? 我看着让GBinTree成为一个界面,但是对于这是否是正确的轨道感到困惑? 任何帮助,将不胜感激。

您不能在Java中重载运算符。 <运算符仅适用于基元类型,而不适用于引用类型。 由于T是表示引用类型的类型变量,因此不能在类型T变量上使用< 。 你必须使用

 if (item.compareTo(bn.item) < 0) 

检查返回的值并决定用它做你想做的事情。

您不知道T类型是什么,但您知道它将是一个实现Comparable的类型,因此实现了compareTo()方法。

您可以使用这种简单的方法
对于大于root.getData = 1的数据,对于数据等于root.getData = 0,对于小于root.getData = -1的数据

 public class BST>{ void add(){ ... if(data.compareTo(root.getData()) == 1) ... }