Przechowywanie obiektów do lokalizacji przez współrzędne x, y

Próbuję określić szybki sposób przechowywania zestawu obiektów, z których każdy ma wartość współrzędnych xiy, dzięki czemu mogę szybko odzyskać wszystkie obiekty w obrębie określonego prostokąta lub okręgu. W przypadku małych zestawów obiektów (~ 100) naiwne podejście do przechowywania ich na liście i iterowania przez nie jest stosunkowo szybkie. Jednak dla znacznie większych grup oczekuje się spowolnienia. Próbowałem przechowywać je również w parze TreeMaps, jednej posortowanej na współrzędnej x, a drugiej posortowanej na współrzędnej y, używając tego kodu:

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

To działa również i jest szybsze dla większych zestawów obiektów, ale jest nadal wolniejsze niż bym chciał. Częścią problemu jest również to, że te obiekty poruszają się i muszą być wstawione z powrotem do tego magazynu, co oznacza usunięcie ich i ponowne dodanie do drzew / list. Nie mogę pomóc, ale myślę, że tam muszą być lepsze rozwiązania. Implementuję to w Javie, jeśli robi to jakąkolwiek różnicę, chociaż oczekuję, że każde rozwiązanie będzie bardziej w postaci użytecznego wzorca / algorytmu.

questionAnswers(6)

yourAnswerToTheQuestion