自定义对象的树集

时间:2018-11-29 02:38:46

标签: java treeset

我为正在处理的项目创建了一个自定义对象(KCtrSrv)的TreeSet,并且尝试使用.higher(KCtrSrv)和.lower(KCtrSrv)。因此,将传递一个KCtrSrv对象,以与TreeSet中已经存在的其他KCtrSrv对象进行比较。我希望能够将其隔离为仅查看中心区域,这可能吗?

**我的树包含三个对象,中心为0.666、2.0、3.333,当前,当我执行tree.higher(newRequest)时,它返回3.333。 newRequest的值分别为center = 0和serverPosition =0。它应该返回0.666。

我不是100%肯定.higher()和.lower()的运行方式,我曾尝试浏览JavaDocs,但实际上并没有太大帮助。我还考虑过为TreeSet创建一个类,并覆盖.higher()和.lower(),但是我不太确定从何处开始进行比较。

任何帮助将不胜感激!

我的对象:

KCtrSrv类实现了可比的{

    private double center;
    private double serverPosition;

    public KCtrSrv(double center, double serverPosition) {

        this.center = center;
        this.serverPosition = serverPosition;
    }

    private void setServerPosition(double position) {
        this.serverPosition = position;
    }

    private double getServerPosition() {
        return this.serverPosition;
    }

    private double getCenter() {
        return this.center;
    }

   public  int compareTo(KCtrSrv x) {
        return (int) Math.abs(this.serverPosition - x.center);
    }

}

1 个答案:

答案 0 :(得分:0)

要使树集仅基于中心进行比较,可以编写如下的compareto方法:

public int compareTo(KCtrSrv x) {
    return Double.compare(this.center, x.center);
}

在旁注中,当a“小于” b时,a.compareTo(b)应该返回负数。我看不到使用Math.abs的实现如何工作