gpt4 book ai didi

java - 使用静态比较器对 BSTree 进行排序

转载 作者:行者123 更新时间:2023-11-29 05:49:56 25 4
gpt4 key购买 nike

我有一些学校作业 BTree<E>类,现在我必须做一个 BSTree<E>扩展 BTree<E> 的类. BSTree应该是一个排序的 BTree .

老师推荐使用静态Comparator可以按所需属性对所有元素进行排序。他给了我们一些代码供我们引用,但不太了解如何在类中使用静态泛型变量。我知道 static 的作用,但我不知道如何解决这个问题。

这是我的代码:

public class BSTree<E> extends BTree<E>{

List<E> duplicates;
static Comparator<E> comp = new NasComparator<E>();

private static class NasComparator<E extends Comparable> implements Comparator<E>{
@Override
public int compare(E o1, E o2){
return o1.compareTo(o2);
}
}
}

最佳答案

可能有点跑题,但我认为值得一看。

你的 Comparator 根本没用。通常我们需要一个Comparator,因为要比较的目标对象不是Comparable,或者默认的比较不适合我们的使用。

但是,如果您只是简单地制作一个具有 E extends Comparable 限制的 Comparator,并且比较逻辑只是简单地 return a.compareTo(b),那么为什么不直接比较呢?有点像

public class BSTree<E extends Comparable> extends BTree<E>{
}

您的排序只需使用 Comparable#compareTo 方法。

如果你想选择性地让用户提供Comparator,引用TreeMap中的做法。基本思想是,如果提供了比较器,则使用比较器,如果没有,则将条目转换为 Comparable,并进行比较。


如果您坚持使用比较器(这就是您在评论中提到的,虽然我不明白背后的原因),因为您需要您的元素是Comparable,所以您需要将此限制放在您的通用类型参数中,并简单地制作一个 Comparator 来比较“Comparable”。

public class BSTree<E extends Comparable> extends BTree<E>{

static Comparator<Comparable> comp = new ComparableComparator();

private static class ComparableComparator implements Comparator<Comparable>{
@Override
public int compare(Comparable o1, Comparable o2){
return o1.compareTo(o2);
}
}
}

它看起来很奇怪,但这就是你要求的。

关于java - 使用静态比较器对 BSTree 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14314564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com