Java verkettet Listen?
Ich habe eine Frage zu verketteten Listen in jave.
Ich habe eine Klasse Node erstellt, die bestimmte Informationen erhält und das Objekt: Mode nextElem;
Nun habe ich noch eine andere Klasse namens Liste erstellt und dort folgende Methode implementiert
Mit der Methode getLastElem bekomme ich immer das aktuell letzte Element der Liste. Da dieses lastElement noch kein next Element besitzt, setze ich mit der Methode setNextElem ein weiteres Element in die Liste.
Meine Frage nun:
Es fängt an mit dem Objekt firstElem in der Liste. Dieses Objekt besitzt, weil es vom Typ Node ist, ein Objekt nextElem, welches aber noch nicht belegt wurde(siehe erstes Bild). Wenn ich jetzt aber mit der setNextElem Methode dieses Objekt mit einem Wert belege, exestiert dieses. Das heißt ja, dass mein 2.Objekt in der Liste die Referenzvariable nextElem hat.
Jetzt kommt mein Problem:
Müsste nextElem nicht überschrieben werden, wenn ich das noch mal die Methode addElem benutze. Denn das 2.Objekt in der Liste heißt ja auch nextElem. Da nextElem vom Typ Node ist, besitzt es auch das Objekt nextElem. Wenn das unbelegte Objekt nextElem von nextElem belegt wird, müsste doch rein theoretisch das erste nextElem überschrieben werden. Damit würde die Datenstruktur Liste nicht mehr funktionieren. Dies ist aber in Wirklichkeit nicht so.Warum?
Derjenige der mir hier drauf antwortet, ist der größte Ehrenmann/Frau
2 Antworten
Das element heißt nicht wirklich "nextElement", das ist nur die lokale bezeichnung für das objekt. Die haben auch noch einen einzigartigen hash, das ist der name wenn du so willst. Den geben sie aus wenn du "toString()" nicht überschreiben hast und das objekt auf der konsole ausgibst.
Die bezeichnung "nextElement" kennt deine node garnicht. Die ist nur innerhalb der klasse Liste bekannt.
Du übergibst diese erstellte node nur der letzten node in der liste, da wird dann das next element überschrieben.
Du kannst die Node in der klasse Liste, in der addElem auch z.B. nur "n" nennen anstatt nextElement. Vielleicht ist das für dich dann verständlicher.
Wie hast du den code denn geschrieben ohne ihn zu verstehen?
Die bezeichnung ist immer nur lokal gültig. Du könntest sagen die referenzvariable von allen ist nextNode.
Die werden auf dem heap abgespeichert. Der name ist dabei egal, hauptsache das programm kennt die speicheraddresse. Das new keyword allokiert speicher auf dem heap und gibt eine Refernz zu diesem speicherort zurück.
Dir scheint schon das ganz grundlegende verständnis zu fehlen. https://de.wikipedia.org/wiki/Sichtbarkeit_(Programmierung) https://de.wikipedia.org/wiki/Datenkapselung_(Programmierung)
bzw. die deutsche wikipedia seite zur sichtbarkeit ist shit, schaue dir lieber die englische an https://en.wikipedia.org/wiki/Scope_(computer_science)
Nö, ich studiere Informatik.
Bzw. konnte ich auch vorher schon etwas java, aber so verkettete listen habe ich damals nicht implementiert.
Es kommt eigentlich erstmal auf die verkettete Liste an, also ob es eine einfach verkettete, doppelt verkettete oder sonstwas ist. Ich gehe mal von einer einfach verketteten Liste in der einfachsten Form aus.
Dabei gehst du zuerst auf das erste Element und hangelst dich dann mit sowas wie "getNextElement()" solange weiter vor bis "getNextElement()" dir "NULL" zurückgibt. An der Stelle weißt du, dass deine Liste zuende ist und du auf dem letzten Element der Liste bist. Für dieses Element setzt du "nextElement" nun auf dein einzufügendes Element.
Überschrieben wird dabei nichts.
Ich hoffe mal es ist verständlich genug.
Was ich halt nicht so ganz verstehe ist, meine Liste besteht ja aus vielen Node Objekten, aber was für Referentvariablen haben den alle diese Methoden?
Ich kenn das halt nur, dass beim erstellen eines Objekt immer eine Name angegeben wird, mit dem das Objekt angesprochen wird. Hier habe ich aber nicht für jedes Objekt einen Namen bestimmt. Wo werden die jetzt abgespeichert?