Я пытаюсь определить быстрый способ хранения набора объектов, каждый из которых имеет значения координат x и y, чтобы я мог быстро получить все объекты в пределах определенного прямоугольника или круга. Для небольших наборов объектов (~ 100) наивный подход, заключающийся в простом хранении их в списке и итерациях по нему, относительно быстр. Однако для гораздо более крупных групп это ожидаемо медленно. Я также пробовал сохранить их в паре TreeMaps, один отсортированный по координате x, а другой отсортированный по координате y, используя этот код:
xSubset = objectsByX.subSet( minX, maxX );
ySubset = objectsByY.subSet( minY, maxY );
result.addAll( xSubset );
result.retainAll( ySubset );
Это также работает и работает быстрее для больших наборов объектов, но все же медленнее, чем хотелось бы. Частично проблема заключается также в том, что эти объекты перемещаются, и их необходимо вставить обратно в это хранилище, что означает их удаление и повторное добавление в деревья / списки. Я не могу не думать, что должны быть лучшие решения. Я реализую это на Java, если это имеет какое-то значение, хотя я ожидаю, что любое решение будет в большей степени в форме полезного шаблона / алгоритма.