Hallo zusammen,
meine Frage besteht heute aus mehreren Teilen. Zum einen haette ich gerne eure Meinung ob der von mir gewaehlte Ansatz ueberhaupt sinnvoll ist. Zum Anderen habe ich eine Frage zur Implementierung dieses Ansatzes.
Das Programm an dem ich gerade arbeite soll Baumsuchen ausfuehren um moeglichst gute Zuege in Spielen zu finden. Wenn ich einen solchen Baum nun aufbaue benoetige ich ja eine ganze Menge von Konstruktoraufrufen, so weit ich weiss sind diese aber recht langsam. Meine Idee war deshalb beim Programmstart eine ganze Reihe von Knoten zu erzeugen und diese dann in den Baum einzufuegen. Wenn dann im naechsten Zug ein neuer Baum erstellt wird kann ich diese Knoten dann wiederverwenden.
So viel zum Ansatz. Macht das Sinn?
Zur Verwaltung der Knoten wollte ich etwas in dieser Art verwenden:
So, der Code static{} wird so weit ich weiss erst ausgefuehrt wenn die Klasse die ihn enthaelt das erste Mal verwendet wird. Da das fragliche Programm in zwei Phasen ablaeuft und nur in der zweiten Suchen ausgefuehrt werden verwende ich in der ersten keinen der gespeicherten Knoten. Allerdings habe ich ausreichend Zeit um sie zu erzeugen. Daher ist meine Frage:
Wie bringe ich Java dazu die Knoten schon zu erzeugen wenn ich die fragliche Klasse nicht verwende?
P.S. Entschuldigt bitte die Rechtschreibung. Ich sitze an einer englischen Tastertur und habe keine Ahnung wie ich Umlaute schreiben soll.
meine Frage besteht heute aus mehreren Teilen. Zum einen haette ich gerne eure Meinung ob der von mir gewaehlte Ansatz ueberhaupt sinnvoll ist. Zum Anderen habe ich eine Frage zur Implementierung dieses Ansatzes.
Das Programm an dem ich gerade arbeite soll Baumsuchen ausfuehren um moeglichst gute Zuege in Spielen zu finden. Wenn ich einen solchen Baum nun aufbaue benoetige ich ja eine ganze Menge von Konstruktoraufrufen, so weit ich weiss sind diese aber recht langsam. Meine Idee war deshalb beim Programmstart eine ganze Reihe von Knoten zu erzeugen und diese dann in den Baum einzufuegen. Wenn dann im naechsten Zug ein neuer Baum erstellt wird kann ich diese Knoten dann wiederverwenden.
So viel zum Ansatz. Macht das Sinn?
Zur Verwaltung der Knoten wollte ich etwas in dieser Art verwenden:
Java:
private static ArrayList<Node> inUse;
private static ArrayList<Node> free;
static{
inUse = new ArrayList<Node>();
free = new ArrayList<Node>();
for(int i=0 ; i<100000 ; i++){
free.add(new Node());
}
}
public static Node getNode(){
if(free.size() != 0){
Node ret = free.get(free.size()-1);
free.remove(free.size()-1);
inUse.add(ret);
return ret;
}else{
for(int i=0 ; i<1000 ; i++){
free.add(new Node());
}
return getNode();
}
}
public static void freeNode(Node n){
inUse.remove(n);
n.reset();
free.add(n);
}
So, der Code static{} wird so weit ich weiss erst ausgefuehrt wenn die Klasse die ihn enthaelt das erste Mal verwendet wird. Da das fragliche Programm in zwei Phasen ablaeuft und nur in der zweiten Suchen ausgefuehrt werden verwende ich in der ersten keinen der gespeicherten Knoten. Allerdings habe ich ausreichend Zeit um sie zu erzeugen. Daher ist meine Frage:
Wie bringe ich Java dazu die Knoten schon zu erzeugen wenn ich die fragliche Klasse nicht verwende?
P.S. Entschuldigt bitte die Rechtschreibung. Ich sitze an einer englischen Tastertur und habe keine Ahnung wie ich Umlaute schreiben soll.