Хранение объектов для поиска по координатам x, y

Я пытаюсь определить быстрый способ хранения набора объектов, каждый из которых имеет значение координат x и y, чтобы я мог быстро получить все объекты в пределах определенного прямоугольника или круга. Для небольших наборов объектов (~ 100) наивный подход, заключающийся в простом сохранении их в списке и повторении по нему, является относительно быстрым. Тем не менее, для гораздо больших групп, это, как ожидается, медленно. Я'мы также пытались сохранить их в паре TreeMaps, одна из которых отсортирована по координате x, а другая - по координате y, используя этот код:

xSubset = objectsByX.subSet( minX, maxX );
ySubset = objectsByY.subSet( minY, maxY );
result.addAll( xSubset );
result.retainAll( ySubset );

Это также работает и работает быстрее для больших наборов объектов, но все же медленнее, чем хотелось бы. Часть проблемы также заключается в том, что эти объекты перемещаются и должны быть вставлены обратно в это хранилище, что означает удаление их и повторное добавление в деревья / списки. Я могу'не поможет, но думаю, что там должны быть лучшие решения. Я'Я реализую это в Java, если это будет иметь какое-то значение, хотя я ожидаю, что любое решение будет более в форме полезного шаблона / алгоритма.

Ответы на вопрос(6)

Ваш ответ на вопрос