TreeSet пользовательских объектов - PullRequest
0 голосов
/ 29 ноября 2018

Я создал TreeSet пользовательских объектов (KCtrSrv) для проекта, над которым я работаю, и я пытаюсь использовать .higher (KCtrSrv) и .lower (KCtrSrv).Таким образом, объект KCtrSrv будет передан для сравнения с другими объектами KCtrSrv, которые уже находятся внутри TreeSet.Я хотел бы иметь возможность изолировать его, чтобы посмотреть только на центральное поле, это возможно?

** Мое дерево содержит три объекта с центрами 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 реализует 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);
    }

}

1 Ответ

0 голосов
/ 29 ноября 2018

Чтобы сделать сравнение наборов деревьев только по центру, вы можете написать свой метод сравнения следующим образом:

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

В примечании, a.compareTo(b) должно возвращать отрицательное число, когда "меньше чем "б.Я не понимаю, как может работать реализация, использующая Math.abs

...