Zum Beispiel habe ich eine Node
Klasse für Binärbäume.Was ist der bessere Weg, um zusätzliche Informationen zu einem bestehenden Objekt hinzuzufügen?
public class Node {
public Node lchild;
public Node rchild; // public for convenience
}
Und jetzt habe ich einen Prozessor, der einige zusätzliche Informationen über Node
Instanzen aufnehmen muss und verwenden sie nur privat. Sagen wir die Nummer in der Baumreihenfolge vor der Bestellung.
Ich denke, einen gerade Weg, es zu machen, ist ein Feld in der Klasse hinzuzufügen:
public class Node {
public Node lchild;
public Node rchild;
public int no; // the number in the pre-order tree traverse
}
Aber ich glaube, das ist definitiv eine schlechte Idee. Also, was ich verwende jetzt ist: Verwenden Sie ein Map<Node, Integer>
public class MyProcessor {
private Map<Node, Integer> no;
public void process1(Node node) {
int id = no.get(node); // or something like this
}
}
Sicherlich kann dieses Problem lösen. Aber mein Anliegen ist:
- Häufiger Zugriff auf eine Karte scheint weniger effizient? (verglichen mit dem Add-Field-Ansatz)
- Wenn ich mehrere Arten von Informationen brauche, muss ich mehrere Karten erstellen, was ein Alptraum zu sein scheint.
Also, gibt es einen besseren Weg bitte? Vielen Dank!
* "Aber ich glaube, das ist definitiv eine schlechte Idee." * Warum? Wird 'Node' in anderen Prozessoren wiederverwendet? –
@ T.J.Crowder Yeah, 'Node' ist weit verbreitet. – abcdabcd987
Ich nehme an, Sie können 'Node' ableiten und so viele Informationen hinzufügen wie Sie wollen. – dejvuth