Liebe Leute,
ich setze mich im Moment auseinander mit einer bescheidenen Queue, trotzdem an einer Stelle, verstehe ich die Logik des Codes überhaupt nicht. Meine Queue
Ich will jetzt eine neue Queue erstellen und die Funktion enqueue(T x) aufrufen, z.B. mit:
Bis auf die Zeile
hat der Compiler folgendes erzeugt (glaube ich):
1. Ein Queue Objekt namens str mit zwei Node<T> Referenzen die auf null zeigen.
2. Ein Node Objekt namens newNode mit einem T element Referenz, die auf "Fido" zeigt, und einem Node<T> Referenz die auf null zeigt.
3. Die Node<T> nodeHead Referenz wird auf das Objekt newNode angewiesen.
Jetzt kommt die Zeile:
Was passiert da genau? Habe ich immer noch ingesamt zwei Objekte, mit jeweils zwei Referenzvariablen? Wenn diese Zeile versucht das Objekt newNode der Variablen Node<T> next zuzuweisen, könnte ich nicht einfach newNode.next = newNode schreiben? Die Rekursivität im Objekt newNode macht das ganze für mich ein bisschen schwieriger nachzuvollziehen...
Für jeden Erklärungsversuch bedanke ich mich in Voraus.
ioannis
ich setze mich im Moment auseinander mit einer bescheidenen Queue, trotzdem an einer Stelle, verstehe ich die Logik des Codes überhaupt nicht. Meine Queue
Java:
class Queue<T> {
private Node<T> nodeHead = null;
private Node<T> nodeEnd = null;
private long size = 0L;
public void enqueue(T x) {
Node<T> newNode = new Node<T>(x, null);
if (nodeHead == null) {
nodeHead = newNode;
} else {
nodeEnd.next = newNode;
}
nodeEnd = newNode;
size++;
}
public T dequeue() throws IllegalStateException {
if (nodeHead == null) {
throw new IllegalStateException();
}
T head = nodeHead.element;
nodeHead = nodeHead.next;
size--;
return head;
}
public long size() {
return size;
}
class Node<T> {
Node<T> next;
T element;
public Node(T element, Node<T> next) {
this.element = element;
this.next = next;
}
}// ende Node
}// ende Queue
Ich will jetzt eine neue Queue erstellen und die Funktion enqueue(T x) aufrufen, z.B. mit:
Java:
Queue <String> str = new Queue <String>();
str.enqueue("Fido");
Bis auf die Zeile
Java:
} else {
hat der Compiler folgendes erzeugt (glaube ich):
1. Ein Queue Objekt namens str mit zwei Node<T> Referenzen die auf null zeigen.
2. Ein Node Objekt namens newNode mit einem T element Referenz, die auf "Fido" zeigt, und einem Node<T> Referenz die auf null zeigt.
3. Die Node<T> nodeHead Referenz wird auf das Objekt newNode angewiesen.
Jetzt kommt die Zeile:
Java:
nodeEnd.next = newNode;
Was passiert da genau? Habe ich immer noch ingesamt zwei Objekte, mit jeweils zwei Referenzvariablen? Wenn diese Zeile versucht das Objekt newNode der Variablen Node<T> next zuzuweisen, könnte ich nicht einfach newNode.next = newNode schreiben? Die Rekursivität im Objekt newNode macht das ganze für mich ein bisschen schwieriger nachzuvollziehen...
Für jeden Erklärungsversuch bedanke ich mich in Voraus.
ioannis