自定义对象的树集
TreeSet of Custom Objects
我为我正在处理的项目创建了自定义对象 (KCtrSrv) 的 TreeSet,我正在尝试使用 .higher(KCtrSrv) 和 .lower(KCtrSrv)。因此,将传入一个 KCtrSrv 对象,以与 TreeSet 中已有的其他 KCtrSrv 对象进行比较。我希望能够隔离它只看中心场,这可能吗?
**我的树包含三个对象,中心分别为 0.666、2.0、3.333,目前当我执行 tree.higher(newRequest) 时,它 returns 3.333。 newRequest 的值为 center = 0 和 serverPosition = 0。它应该返回 0.666。
我不是 100% 肯定 .higher() 和 .lower() 是如何操作的,我已经尝试查看 JavaDocs,但它并没有多大帮助。我还考虑过为 TreeSet 制作一个 class 并覆盖 .higher() 和 .lower(),但是我不太确定从哪里开始比较。
如有任何帮助,我们将不胜感激!
我的对象:
class KCtrSrv 实现 Comparable {
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);
}
}
要使树集仅基于中心进行比较,您可以这样编写比较方法:
public int compareTo(KCtrSrv x) {
return Double.compare(this.center, x.center);
}
旁注,当 a 为 "less than" b 时,a.compareTo(b)
应该是 return 负数。我看不出使用 Math.abs 的实现如何工作
我为我正在处理的项目创建了自定义对象 (KCtrSrv) 的 TreeSet,我正在尝试使用 .higher(KCtrSrv) 和 .lower(KCtrSrv)。因此,将传入一个 KCtrSrv 对象,以与 TreeSet 中已有的其他 KCtrSrv 对象进行比较。我希望能够隔离它只看中心场,这可能吗?
**我的树包含三个对象,中心分别为 0.666、2.0、3.333,目前当我执行 tree.higher(newRequest) 时,它 returns 3.333。 newRequest 的值为 center = 0 和 serverPosition = 0。它应该返回 0.666。
我不是 100% 肯定 .higher() 和 .lower() 是如何操作的,我已经尝试查看 JavaDocs,但它并没有多大帮助。我还考虑过为 TreeSet 制作一个 class 并覆盖 .higher() 和 .lower(),但是我不太确定从哪里开始比较。
如有任何帮助,我们将不胜感激!
我的对象:
class KCtrSrv 实现 Comparable {
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);
}
}
要使树集仅基于中心进行比较,您可以这样编写比较方法:
public int compareTo(KCtrSrv x) {
return Double.compare(this.center, x.center);
}
旁注,当 a 为 "less than" b 时,a.compareTo(b)
应该是 return 负数。我看不出使用 Math.abs 的实现如何工作