Tach!
if(Controller.stations.get(i).tripel.n && (Controller.stations.get(i).tripel.a!=-1 || Controller.stations.get(i).tripel.b!=-1))
listNs.add(i);
else if(!Controller.stations.get(i).tripel.n)
listOhneNs.add(i);
mit Controller.stations.size==100.000.000 (Controller.stations ist eine linkedList), diese berechnung dauert sehr, sehr lange.
Du weißt aber schon, wie eine Linked List aufgebaut ist, und was man tun muss, um das x-te Element zu finden - und das ganze im ungünstigsten Fall auch noch vier Mal?
gibt es eine möglichkeit das zu "stark" zu beschleundigen? zb über sogenannte "Assembler" oder über C?
Nimm erst einmal eine Datenstruktur, die besser auf indexierten Zugriff ausgelegt ist. Alternativ lauf mit dem ListIterator durch, der hangelt sich schrittweise an den Elementen entlang, ohne jedes Mal von vorn (oder hinten) zu beginnen. (Vielleicht geht auch foreach, wenn das den ListIterator verwendet.)
Wenn du mit einem Objekt - noch dazu einem, dessen Ermittlung aufwendig ist - mehrere Dinge tun möchtest, solltest du es in einer lokalen Variable ablegen. (Weil es ein Objekt ist, wird das eine Referenz auf das Original.)
Die Folgefrage ist auch noch, ob du wirklich den Index-Wert brauchst, oder ob du nicht eigentliche lieber eine Referenz auf das eigentliche Element in deinen list(Ohne)Ns ablegen willst (und ob das nicht auch einfache statt verlinkter Listen sein können).
dedlfix.