P
plusman
Gast
Hallo,
in Java gibt es - soweit ich weiß - auch das Spiel mit Referenz und Wert/Primitivtypen. Falls nicht, bitte aufklären
Soweit...
Jetzt habe ich ein Problem mit einem Parameter. Und zwar möchte ich meiner Funktion eine Variable übergeben und diese Variable ggf. auf null setzen (die Variable als Müll abstempeln). Im Endeffekt wie z.B. in C++ ein "delete" durchführen (Dass das aufgrund der GC nicht möglich ist, weiß ich schon ).
Hier mal ein kurzes Beispiel:
So ungefähr.
Ich habe einen binären Baum und möchte diesen komplett "löschen" (natürlich könnte ich auch einfach die Wurzel auf null setzen, aber das wäre zu einfach (Es geht hier auch mehr um den Algorithmus)).
Zunächst wird - wenn vorhanden - der linke Teilbaum "gelöscht", anschließend - wenn vorhanden - der rechte.
Da dann keine Teilbäume mehr da sind, "löscht" der Knoten sich selbst.
Wenn ich aber jetzt nur n = null setze, ist das EIGENTLICHE n - n ist ja nur ein Verweis auf die eigentliche Variable - aber weiterhin !null, verweist also weiterhin auf das Objekt.
Wie ist es möglich, dass wenn ich z.B.
der gesamte Baum "gelöscht wird", also jeder Verweis auf null gesetzt wird?
Diese Implementation macht nämlich nichts, weil weiterhin alle Objektverweise vorhanden sind.
Ich habe in der FAQ nachgesehen, aber nichts zu Referenzen gefunden, was mich eigentlich verwirrt. Vielleicht habe ich es nur übersehen
Auch das Suchen mit einer beliebten Suchmaschine (?) hat mich nicht weiter gebracht.
Für freundliche und unterstützende Hilfe wäre ich sehr dankbar.
MfG
plusman
in Java gibt es - soweit ich weiß - auch das Spiel mit Referenz und Wert/Primitivtypen. Falls nicht, bitte aufklären
Soweit...
Jetzt habe ich ein Problem mit einem Parameter. Und zwar möchte ich meiner Funktion eine Variable übergeben und diese Variable ggf. auf null setzen (die Variable als Müll abstempeln). Im Endeffekt wie z.B. in C++ ein "delete" durchführen (Dass das aufgrund der GC nicht möglich ist, weiß ich schon ).
Hier mal ein kurzes Beispiel:
Code:
public void delete(Node n) {
if (n.left != null)
delete(n.left);
if (n.right != null)
delete(n.right);
n = null;
}
So ungefähr.
Ich habe einen binären Baum und möchte diesen komplett "löschen" (natürlich könnte ich auch einfach die Wurzel auf null setzen, aber das wäre zu einfach (Es geht hier auch mehr um den Algorithmus)).
Zunächst wird - wenn vorhanden - der linke Teilbaum "gelöscht", anschließend - wenn vorhanden - der rechte.
Da dann keine Teilbäume mehr da sind, "löscht" der Knoten sich selbst.
Wenn ich aber jetzt nur n = null setze, ist das EIGENTLICHE n - n ist ja nur ein Verweis auf die eigentliche Variable - aber weiterhin !null, verweist also weiterhin auf das Objekt.
Wie ist es möglich, dass wenn ich z.B.
Code:
delete(root);
Diese Implementation macht nämlich nichts, weil weiterhin alle Objektverweise vorhanden sind.
Ich habe in der FAQ nachgesehen, aber nichts zu Referenzen gefunden, was mich eigentlich verwirrt. Vielleicht habe ich es nur übersehen
Auch das Suchen mit einer beliebten Suchmaschine (?) hat mich nicht weiter gebracht.
Für freundliche und unterstützende Hilfe wäre ich sehr dankbar.
MfG
plusman