hi Klaus
ich bin nicht sicher, ob ich deine geisterstunde da ganz verstanden habe. daher nur ein paar grundsätzliche hinweise…
dein grundproblem ist, dass die objekte erstmal voneinander wissen müssen. das einfachste ist, jedem der objekte die referenz auf einen zentralen „manager“ mitzugeben (z.b. über den konstruktor). gleichzeitig werden alle objekte beim manager registriert (z.b. hat der manager eine arraylist, in der alle objekte drinnen sind). nun kann der manager über geeignete methoden jedem objekt mitteilen, welche anderen objekte es noch gibt.
noch einfacher geht es, die zentrale liste in einem singleton abzulegen - die objekte brauchen dann keine referenz auf den manager sondern können sich die referenz jederzeit bei bedarf aus dem statischen bereich der manager-klasse holen.
vorstellbar wäre noch, dass die einzelnen objekte ihre „position“ ständig an den manager weitergeben (z.b. über property-change-listener) oder dass der manager die positionen bei bedarf abfragt (je nachdem, was in deinem fall effizienter ist). damit kannst du dann z.b. sowas realisieren:
Object next = Manager.getInstance().getNext(this);
also den manager fragen, welches objekt dem angegebenen am nächsten ist. will ein objekt seinen nachbarn feststellen, dann übergibt es sich einfach selbst.
falls du sehr viele objekte auf grosse „fläche“ verteilt hast, kann es effizienter sein, die fläche in segmente zu unterteilen. jedes objekt weiss dabei, in welchem segment es sich befindet. der manager muss daher nicht mehr die gesammte fläche durchsuchen sondern nur die objekte in der jeweiligen fläche (bzw. den unmittelbar angrenzenden). kann man sich also so ähnlich wie eine hashtable vorstellen.
das ganze ist natürlich nur eine von mehreren denkbaren lösungen. ob die lösung jetzt besonders „schön“ ist, kann ich nicht beurteilen, praktikabel ist sie auf jeden fall.
lg
erwin