Datentypen PriorityQueue und Map

G

Guten_Morgen123

Gast
Einen wunderschönene guten Morgen zusammen,

Ich hab folgendes Problem, ich hab eine räumliche Baumstruktur, konkret einen kd-Baum, und bin jetzt dabei die k-Nearest-Neighbor Suche zu implementieren. Also eine gewissen Anzahl k von am nächsten gelegenen Punkten zu einem gegeben Objekt.

Cool wäre es hier eine PriorityQueue der Länge k zu benutzten, dann den Baum zu durchlaufen und Objekte die näher dran sind als das kte Objekt in der Queue in die Queue zu packen, so daß das letzte Objekt rausfliegt.

Das Problem ist jetzt, daß ich eine Art Map zwischen Objekt und Abstand zu Suchpunkt in der Queue verwalten muss. Hinzu kommt noch, dass in den Abstand nicht als Key verwenden kann, da er nicht eindeutig ist (mehrere Punkte können ja den gleichen Abstand haben). Außerdem ist eine Map ja selber eine Liste und nicht nur die Verknüpfung von einem einzelnes Objekt und einem Key. Ich bräuchte ja sowas in der Art Queue[Map{Objekt:11, Abstand:20}, Map{Objekt:44, Abstand:123},Map{Objekt:4, Abstand:445}] -> also sortiert nach Abstand.

Also was gehen würde, wäre einfach eine neue Klasse zu schreiben die ein Punktobjekt und den Abstand hält, dazu noch einen Comparator und das ganzen dann in die Queue zu stecken.

Denk ihr, dass is so am Besten, oder kann ich doch noch irgendwie das Map-Interface geschickt einbauen.


Danke und Gruß
 
G

Guten_Morgen123

Gast
Ja sorry war auch ein bisschen kompliziert geschrieben...

Also die Sache ist die ich brauch ne PriorityQueue in der ich Paare aus MovingObject(was eine Klasse von mir ist) und einem double-Wert Distance (zu dem aktuellen Suchpunkt) speichern. Das ganze soll nach Distance geordnet sein...

Die Frage ist jetzt eigentlich nur ob ich für diese Paare (MovingObject/Distance) ne eigene Klasse (die ein MovingObject und ein double beinhaltet) mit Comperator schreiben soll, oder ob man da irgendwie z.B. mit Map was machen kann. Es sollten halt einzelne Paare sein und nicht in irgendeiner Liste oder so, da ich des ganze ja in die Queue stecken will. Und wenn ich des richtig sehe sind ja alle Sachen die mit dem Map Interface zu tun haben immer in Listen, Arrays ect, oder?

Ich hab noch nicht alzuviel mit Java gemacht und hab bei euren gefühlten 5000 Interfaces noch nicht ganze den Durchblick...
Ist also mehr so ne Stilfrage ob euch da auf die schnelle was eleganteres einfällt bzw wie ihr sowas lösen würdet.

Die Variante mit der extra Klasse hab ich schon implementiert, läuft wunderbar...
Finds halt nur irgendwie nicht so schön, dass ich extra ne Klasse brauch für eine Datenrepresentation die nur von einer Funktion kurzzeitig benutzt wird...
 

Marco13

Top Contributor
So eine kleine Hilfsklasse ist an sich nicht schlimm, die kann man ja gut verstecken (z.B. als private static class). Wenn davon sehr viele Instanzen, jeweils nur für sehr kurze Zeit erstellt werden, und das ganze extrem zeitkritisch ist, könnte man sich vielleicht noch was anderes überlegen, aber sonst ist das wohl OK :)
 

Ähnliche Java Themen

Neue Themen


Oben