Speichern von Objekten zur Lokalisierung nach x- und y-Koordinaten

Ich versuche, eine schnelle Methode zum Speichern einer Gruppe von Objekten zu finden, von denen jedes einen x- und einen y-Koordinatenwert hat, sodass ich schnell alle Objekte in einem bestimmten Rechteck oder Kreis abrufen kann. Für kleine Mengen von Objekten (~ 100) ist der naive Ansatz, sie einfach in einer Liste zu speichern und darin zu iterieren, relativ schnell. Für viel größere Gruppen ist dies jedoch erwartungsgemäß langsam. Ich habe versucht, sie auch in zwei TreeMaps zu speichern, eine nach der x-Koordinate und eine nach der y-Koordinate sortiert, und zwar mit folgendem Code:

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

Dies funktioniert auch und ist bei größeren Objektgruppen schneller, aber immer noch langsamer als ich es gerne hätte. Ein Teil des Problems ist auch, dass sich diese Objekte bewegen und wieder in diesen Speicher eingefügt werden müssen, was bedeutet, dass sie aus den Bäumen / Listen entfernt und erneut hinzugefügt werden. Ich kann nicht anders, als zu denken, dass es bessere Lösungen geben muss. Ich implementiere dies in Java, wenn es einen Unterschied macht, obwohl ich erwarte, dass jede Lösung mehr in Form eines nützlichen Musters / Algorithmus vorliegt.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage