我为正在处理的项目创建了一个自定义对象(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);
}
}
答案 0 :(得分:0)
要使树集仅基于中心进行比较,可以编写如下的compareto方法:
public int compareTo(KCtrSrv x) {
return Double.compare(this.center, x.center);
}
在旁注中,当a“小于” b时,a.compareTo(b)
应该返回负数。我看不到使用Math.abs的实现如何工作