Verständnisproblem Call-By-Reference

xlChaos

Mitglied
Guten Tag zusammen,

in der FH haben wir vor geraumer Zeit mal das Thema LinkedList bearbeitet. Jetzt stehe ich aber vor einer Stelle, wo ich einfach nicht verstehe wie es funktioniert ( in Eclipse funktioniert der Code einwandfrei). Es geht darum, dass es Nodes gibt in der LinkedList und es gibt eine root, eine last und eine current Node. Ein Nodeobjekt ist sehr einfach gehalten. Es hat einen Data Bereich und einen next Point.



[CODE lang="java" title="LinkedList"]public class LinkedList<T> {
private Node<T> root;
private Node<T> last;
private Node<T> current;

public LinkedList() {
root = new Node(null);
last = root;
}

public boolean isEmpty() {
return root == last;
}

public void append( T data) {
Node newNode = new Node(data);
last.setNext(newNode);
last = newNode;
}
public boolean showRoot () {
return root.getNext() != null;
}

public T getFirst() {
current = root.getNext();
if (current == null)
return null;
return current.getData();
}
}[/CODE]

Woher weiss root in getFirst() was sein nächster ist, wenn es nie ein setNext für root gegeben hat?
Ich vermute mal, dass es was damit zu tun hat was im Konstruktor steht aber reicht eine einfache last= root Zuweisung? Warum braucht root kein setNext() in append beim ersten mal wenn es eine neue Node gibt?

[CODE lang="java" title="Node"]public class Node<T> {
private T data;
private Node next;

public Node(T data) {
this.data = data;
this.next = null;
}

public T getData() {
return data;
}

public void setData(T data) {
this.data = data;
}

public Node getNext() {
return next;
}

public void setNext(Node next) {
this.next = next;
}
}[/CODE]
 
Im Konstruktor wird gesetzt
Java:
last = root;
Dadurch zeigen beide Referenzen auf das gleiche Objekt.
Wird später (beim Einfügen des ersten Elements) aufgerufen:
Java:
last.setNext(newNode);
so wird auch next von root gesetzt, da last und root in diesem Augenblick ja noch identisch sind.
 
Woher weiss root in getFirst() was sein nächster ist, wenn es nie ein setNext für root gegeben hat?
In diesem Fall hat root keinen nächsten Node.

Root selbst hat kein 'data' gesetzt, ist somit quasi "ein leerer Knoten" ohne Inhalt.

Ruft man 'getFirst' ("gib mir die Daten vom ersten Knoten") auf, ohne dass jemals etwas angehängt (append) wurde (dann gibt es ja nur den root), wird 'null' zurückgegeben.
 
Java ist komplett "Call-By-Value".
Wobei Dein Problem, xlChaos, mit diesen Techniken eigentlich nichts zu tun. 🙂 Insofern ist der Titel eigentlich falsch gesetzt.
 

Zurück
Oben