powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка TreeSet
25 сообщений из 26, страница 1 из 2
Сортировка TreeSet
    #39004949
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не затруднит, то помогите прояснить ситуацию с компараторами для сортировки коллекции.
У меня есть TreeSet в которм класс с двумя полями типа Integer для координат х и у.
Используя метод subSet( Point( x, y), Piont( x, y)) я пытаюсь отсортировать обеъкты входящие в облать видимости координат, но получаю и те что за ней.
Перепробовал разные варианты копаратора.
Возможно ли решить такие задачи использовав копоратор?
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39004961
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
freeVan, компаратор определяет, какой из двух объектов больше. По какому принципу вы будете выбирать больший объект - решать вам. Что у одного объекта должно быть больше, чем у другого?

В вашей задаче не понятно, что такое область видимости координат. Какую она имеет форму?

Я себе так могу представить ситуацию: есть какая-то область в двумерной системе координат. Например, для простоты, круглая. У нее есть центр. У этого центра есть координаты x и y. И еще у этой области есть радиус.

Тогда, чтобы как-то добраться до точек, попадающих внутрь этой круглой области, можно их отсортировать, посчитав в компараторе расстояние от точки до центра этой области. Точки с меньшим расстоянием будут меньше. Понятно, что внутрь области попадают точки, у которых расстояние до центра <= радиуса области.

А определение границ для subSet - это уже следующая проблема.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39004998
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelena,

Спасибо что откликнулись!

Область видимости это те значения Х и У которые я передаю в методе subSet
это будет квадратная область.

Допустим мне необходимы объекты Piont у которых х > 1 < 10 , y > 1 <10
subSet( Point( 1, 1 ) , Point( 10, 10 ) )
Както так объсню
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39005034
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
freeVan, ну и что получается, что вы хотите каким-то образом один раз отсортировать точки на координатной плоскости, а потом проходиться по ним при помощи разных subSet, подразумевающих разные квадраты?
Эти точки отличаются только координатами x,y и расстоянием до начала координат.
У вас subSet в виде квадрата не получится.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39005043
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelena, у меня уже просто голова квадратная.

пробую, ничего не выбирается после subSet.
Возник вопрос дугой:
если будет два разных TreeSet , с разными компараторами которые сортируют по Х и по У
после первого subSet я делаю putAll в другой TreeSet который сортирует по У
Тот putAll это будет ссылка на Класс Point или это копироваться будет ?
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39005061
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
freeVan, если вопрос о том, будут ли создаваться копии объектов, то ответ - нет, копии объектов создаваться не будут.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39005065
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelena,

Спасибо Вам Елена большое!

Все прояснили.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39005173
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freeVan,

вам k-d дерево нужно
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39005179
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Спасибо.

Озакомился, тут все сложнее чем мне надо, узлы как объекты хранящие ссылки, память будет расходована на все это, потом еще и массивы перебирать, затраты временные.

Очень сложное дерево, до такого пока не дорос наверное, где такое применяется наверное чтото типа микробиологии или наблюдение за космосом, милларды точек.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39005444
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freeVankealon(Ruslan),

Спасибо.

Озакомился, тут все сложнее чем мне надо, узлы как объекты хранящие ссылки, память будет расходована на все это, потом еще и массивы перебирать, затраты временные.

а TreeSet по вашему как сделан?
freeVanОчень сложное дерево, до такого пока не дорос наверное, где такое применяется наверное чтото типа микробиологии или наблюдение за космосом, милларды точек.
в вашем случае 2-d дерево, массив там не обязателен
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39005548
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freeVanДопустим мне необходимы объекты Piont у которых х > 1 < 10 , y > 1 <10
subSet( Point( 1, 1 ) , Point( 10, 10 ) )
Както так объсню
Вы что-то совсем не в ту степь зарулили.
Координаты {x,y} это Частично упорядоченное множество . Для него, конечно, можно создать компаратор, но он будет неоднозначным. Так как компаратор имеет 3 значения - больше, меньше, равен. А в частичном порядке их 4 - больше, меньше, равен, и "отношение не определено"

Единственный способ упорядочить отношение это привести к единому числу f(x, y), например расстояние до определенной точки.

И у вас типичная ошибка в вопросе, вы не описываете задачу, вы описываете своё решение.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39017323
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freeVan,
во либа, как раз под вашу задачу, может кому и пригодится
FLANN - Fast Library for Approximate Nearest Neighbors
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39017328
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freeVanЕсли не затруднит, то помогите прояснить ситуацию с компараторами для сортировки коллекции.
У меня есть TreeSet в которм класс с двумя полями типа Integer для координат х и у.
Используя метод subSet( Point( x, y), Piont( x, y)) я пытаюсь отсортировать обеъкты входящие в облать видимости координат, но получаю и те что за ней.
Перепробовал разные варианты копаратора.
Возможно ли решить такие задачи использовав копоратор?

Я так понял Вам надо свой компаратор придумать...???
Ну так положите в него какой нибудь принцип...например удалённость координаты от какой нибудь точки
Показатель=(x1-x2) квадрат + (y1-y2) квадрат
А если от начала координат то вообще просто.
Показатель=(x) квадрат + (y) квадрат.

И сравнивайте показатели для сортировки.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031741
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al,

Помоему гениально!!!
Спасибо за идею, как раз таки от начала координат.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031784
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al,

Пока не тестировал, но сразу понял где бдет проблема, а что если координата Х отрицательная или У?
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031801
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freeVanirbis_al,

Пока не тестировал, но сразу понял где бдет проблема, а что если координата Х отрицательная или У?
Ты напиши формулу расстояния по Пифагору. Там отрицательные возводятся в квадарат и уходят.

Вот почемучка...
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031807
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Квадрат отрицательного будет положительное.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031814
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freeVan, будешь продолжать спорить или всё таки напишешь формулу?
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031825
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
х1=-2;
y1=-3;
x2=2;
y2=3;

R1 = (-2)квадрат + (-3)квадрат ;
R2 = (2)квадарат + (3квадрат );

R1 = 4 + 9
R2 = 4 + 9
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031864
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freeVan, всё правильно. В твоей системе метрик расстояние от (-2,-3) до (0,0) центра и от центра до (2,3) одинаково.

Ты получил что хотел. И сортировка в данном случае будет считать что эти Points одниаковы.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031871
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Спасибо за активнсть.
Думаю что можно будет изменить ответ формулы на отрицательный если одна из координат отрицательня.
Пока занят другим, потом проверю на практике.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031892
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тебе еще для коллекции.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
/**
 * Created by mayton on 8/18/2015.
 */
public class Point implements Comparable {

    int x;
    int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public int compareTo(Object o) {
        if (o==null) return -1;
        if (o instanceof Point){
            Point p = (Point)o;
            if (this.x < p.x) return -1;
            if (this.x > p.x) return 1;
                // x1 = x2
                if (this.y < p.y) return -1;
                if (this.x > p.y) return 1;
                // x1 = x2 AND y1 = y2
                return 0;
        }
        return -1;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        if (x != point.x) return false;
        return y == point.y;

    }

    @Override
    public int hashCode() {
        int result = x;
        result = 31 * result + y;
        return result;
    }
}



Если захочешь переписать под Double то помни что сравнение разных визуально (на экране) констант может внезапно
дать true в силу погрешности кастинга. И есть побочные эффекты при сравнении Double.NaN.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031894
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Вообще шикарно, супер спасибо!

У меня там еще есть пост по поводу ByteBufferPool, посмотрите.
http://www.sql.ru/forum/1171339/bytebufferpool
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031928
freeVan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не подход ит.

Point 1 : х = 3 у = 4;
Point 2 : x = 4 y = 3;

получается одинаково удалены от начала координат.
На практике мне надо отсортировать только те точки которые попадают в область видимости.

Например:

Point 1 : х = 3 у = 4;
Point 2 : x = 6 y = 7;

В область видимости попадают те точки у которых 3 <= x <= 6 и 4 <= y <=7.
Нужен хитрый компаратор, либо использовать рекомендуемые библиотеки с кучей кода.
...
Рейтинг: 0 / 0
Сортировка TreeSet
    #39031931
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется ты не понимаешь для чего нужен интерфейс Comparable.

И при чем здесь область видимости координат??
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Сортировка TreeSet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]