我必须实现一个通用的AVL树作为作业。它的定义如下:Java中的排序泛型
public class AVL<Key,Elem>;
的问题是,我认为在某些时候,我不得不对键进行比较,以决定其中一个节点的身边,我分配的元素。为了这个作业的目的,Integers将被用作Keys。
由于没有其他限制或有关信息,我首先想到的是,Key将始终是一个Integer。但是,这使得通用的“关键”变得多余,我不认为这就是教师所期望的。所以,我认为最好的解决方案包括强制传递任何Key作为Key实现的比较器,或类似的东西(我真的从来没有用过Comparator,只是猜测),然后使用该比较器来比较Keys而不是使用==,<,>和!=运算符。但是,我不知道如何去做。任何提示?
在此先感谢。
此解决方案和使用Comparator有什么区别?有人告诉我他是用它做的。感谢您的解决方案。 – bluehallu 2011-04-16 15:36:27
我认为你可以用Comparator来混合Comparable。比较器将是一个对象,它可以比较任何类型的对象而无需实现“可比较”。但是,您的密钥不会实现“比较器”,但您可以将其作为单独的对象传递。另一方面,Comparable将对象标记为具有自然顺序(由'comparaTo()'的实现定义,如果你的键实现了,它们可以直接进行比较,注意所有Number对象('Integer', 'Double'等)以及'String'实现'Comparable'。 – Thomas 2011-04-16 15:53:13
明白了,我将开始阅读关于Comparable接口的Java文档。谢谢。 – bluehallu 2011-04-16 15:58:33