在Java中对泛型进行排序

| 我必须实现一个通用的AVL树作为作业。它的定义如下:
public class AVL<Key,Elem>;
问题是我假设在某个时候,我将不得不比较键来决定我在节点的哪一侧分配元素。出于此作业的目的,整数将用作键。 由于没有其他限制或信息,因此我首先想到的是假设Key始终是Integer。但是,这使通用的“键”成为多余,而且我认为这不是老师所期望的。因此,我认为最好的解决方案包括强制执行Key实现比较器时传递的任何内容或类似的东西(我真的从未与Comparator一起工作过,只是猜测),然后使用该比较器比较Keys ==,<,>和!=运算符的说明。但是,我不知道如何去做。有什么提示吗? 提前致谢。     
已邀请:
尝试
public class AVL<Key extends Comparable<Key>,Elem>;
,并使用
Comparable<T>
接口所需的and2ѭ方法,该方法由
Integer
实现。     
标准Java API中的
SortedMap
SortedSet
实现要么使用
Comparator<Key>
并调用其
compare(k1, k2)
方法,要么假定键实现
Comparable<Key>
,然后调用
k1.compareTo(k2)
。大多数都提供这两种方法,具体取决于所使用的构造函数。 (EnumMap / EnumSet不支持,因为它们仅支持按声明顺序对枚举值进行内置排序。) “ 11”方法要求密钥始终以相同的方式排序,并且将用于具有规范顺序(例如整数)的密钥,您要在此使用此顺序。 ѭ12'方法更灵活,因为您可以将相同的键对象用于顺序不同的地图,也可以将其用于无法控制或没有规范顺序的键(例如列表,树/图等。您还可以使用它来使用整理器(这是实现Comparator的类),根据除纯Unicode值(例如,基于语言环境)以外的其他条件对字符串键进行排序。 两者都需要对键进行总排序,但是我想这对于您的AVL树也是必需的。 这是一个Comparator实现,可在任何可比较的对象上使用,因此(可以在内部)将其用作Comparable变体的适配器。
 public static <X extends Comparable<X>> Comparator<X> makeComparator() {
     return new Comparator<X>() {
         public int compare(X left, X right) {
             return left.compareTo(right);
         }
     };
 }
    

要回复问题请先登录注册