Das leidige Thema: Referenzen

Status
Nicht offen für weitere Antworten.
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:

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);
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
 

Wildcard

Top Contributor
Wie du ja schon richtig bemerkt hast, ist in Java alles Call-by-value, du bekommst also nur eine Kopie der Referenz und kannst die anderen Handles nicht umbiegen.
Du musst also die Node aus dem Parent-Knoten löschen.
Der root Knoten selbst verschwindet erst dann, wenn du keine (starken)Referenzen mehr darauf hälst.
 

Kola

Aktives Mitglied
Du kannst 'n' als Array mit einem Element übergeben, und dann zum Löschen das Element auf 'null' setzen. Das ist dann so eine Art "Call-by-reference".
Andernfalls würde ich die Funktion als 'Node delete(Node n)' implementieren.
Code:
Node delete(Node n)
{
    n.left = delete(n.left);
    n.right = delete(n.right);
    //und n löschen (mit Hilfe des return-Wertes:
    return null;
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Programmvorstellung & Frage zum Thema Geschäftsform Allgemeine Java-Themen 51
D Thema: Vererbung Ober-/Unterklassen Allgemeine Java-Themen 16
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
L thema gelöscht Allgemeine Java-Themen 0
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
P Javac ein wirklich nerviges Thema Allgemeine Java-Themen 10
M Suche Java-Projekt zum Thema Elektrotechnik Allgemeine Java-Themen 6
reibi Workspace schon geöffnet (Kein Eclipse Thema) Allgemeine Java-Themen 14
O Feeds zum Thema Java Allgemeine Java-Themen 10
ARadauer allgemeines zum thema java security Allgemeine Java-Themen 5
D Leidiges Thema MVC *g* Allgemeine Java-Themen 2
K Frage zum thema Java und Internet Allgemeine Java-Themen 49
O Fehler in Listing aus Buch ? Thema: Threads und Threadpool Allgemeine Java-Themen 8
G Links zum Thema Synchronisation Allgemeine Java-Themen 7
M -->: Seite war mit Virus infiziert, daher neues Thema . Allgemeine Java-Themen 3
A Thema JAR-Erstellung (mal wieder) => etwas komplizierter Allgemeine Java-Themen 8
Chucky Facharbeit Informatik - Thema? Allgemeine Java-Themen 4
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
G geeignetes Thema für Kurzreferat? Allgemeine Java-Themen 3
F Frage zum Thema Reflection Allgemeine Java-Themen 13
P DA Thema ??? Allgemeine Java-Themen 2
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
J Mit Referenzen verkettet Listen. Allgemeine Java-Themen 9
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
kaoZ Best Practice Shared Actions , Referenzen in Gui halten ? Allgemeine Java-Themen 25
K Referenzen finden Allgemeine Java-Themen 6
R Referenzen im Heap anzeigen Allgemeine Java-Themen 3
M Datentypen Referenzen oder seperate IDs vergleichen? Allgemeine Java-Themen 6
D Problem mit Referenzen beim Serialisieren Allgemeine Java-Themen 3
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
A Methoden ohne Referenzen finden Allgemeine Java-Themen 9
E EMF Ecore Modell. Referenzen nach außen. Allgemeine Java-Themen 2
F Referenzen auf Objekte Allgemeine Java-Themen 5
hdi Speichergröße von Objekten & Referenzen Allgemeine Java-Themen 8
S Serialisierung und Referenzen Allgemeine Java-Themen 6
D Referenzen; == Allgemeine Java-Themen 2
D Referenzen weiterreichen vs. statischer Zugriff Allgemeine Java-Themen 3
G Pointer und Referenzen Allgemeine Java-Themen 3
I Referenzen in Datei speichern Allgemeine Java-Themen 2
G (De)serialisierung und Referenzen Allgemeine Java-Themen 5
J Bibliothek gesucht Ana_lysieren von wss. Referenzen Allgemeine Java-Themen 2
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
O Vektor kopieren (Inhalt, nicht Referenzen) Allgemeine Java-Themen 3
M Übergabe von Referenzen Allgemeine Java-Themen 3
H Referenzen statt Objekte für große Speicherstrukturen Allgemeine Java-Themen 19
N int[] referenzen in ein Array packen, brauche Hilfe. Allgemeine Java-Themen 7
A Referenzen / HashCodes nicht konstant? Allgemeine Java-Themen 2
K Probleme mit Referenzen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben