java如何使自己的泛型结构具有动态比较器
我想知道如何在实现Comparable的类中重写compareTo方法
我的结构树声明如下
public class Tree<T extends Comparable<T>>
使用这种结构的类是这样的平面
public class Plane implements Comparable<Plane>
使用override compareTo方法
问题是,如果我想用默认的比较器创建一个树,我可以很容易地使用它
Tree<Plane> planes = new Tree<Plane>();
但我想有另一个树结构,有平面和不同的compareTo方法,如何在平面中重写该方法
谢谢
# 1 楼答案
您可以将比较器作为平面的一个参数
每当您想要更改compare方法时,只需将一个不同的Compariable实例或lambda表达式传递给构造函数
# 2 楼答案
定义重载构造函数:
然后对树元素使用comparator而不是
compareTo
方法但是请注意,提供比较器的功能消除了
T extends Comparable<T>
的限制(无论如何,这比T extends Comparable<? super T>
更好)但是在这种情况下,您不能安全地拥有默认构造函数类型。您可能需要要求始终通过一个比较器;或者提供静态工厂方法来创建自然有序的树:
像这样调用