Ich bin eigentl. noch noob, aber etwas kam mir komisch vor, warscheinlich weil ich noch so ein noob bin...
Aber ich verstehe es nicht.
Und zwar im Listing 15.4: Die Klasse LinkedQueue:
001 /* LinkedQueue.java */
002
003 import java.util.*;
004
005 /**
006 * Die folgende Klasse realisiert eine Queue-Collection
007 * auf der Basis einer einfach verketteten linearen Liste.
008 * Die LinkedQueue kann im Prinzip beliebig viele Elemente
009 * aufnehmen. Die Laufzeiten der Einfüge- und Löschmethoden
010 * sind O(1). Der von iterator() gelieferte Iterator
011 * besitzt KEINE Implementierung der Methode remove().
012 */
013 public class LinkedQueue
014 implements Queue
015 {
016 protected ElementWrapper first;
017 protected ElementWrapper last;
018 protected int count;
019
020 public LinkedQueue()
021 {
022 first = last = null;
023 count = 0;
024 }
025
026 public boolean add(Object o)
027 {
028 if (count == 0) {
029 //insert first element
030 first = new ElementWrapper();
031 last = first;
032 count = 1;
033 } else {
034 //insert element into non-empty queue
035 last.next = new ElementWrapper();
036 last = last.next;
037 ++count;
038 }
039 last.element = o;
040 last.next = null;
041 return true;
042 }
043
044 public Object retrieve()
045 throws NoSuchElementException
046 {
047 if (count <= 0) {
048 throw new NoSuchElementException();
049 }
050 ElementWrapper ret = first;
051 --count;
052 first = first.next;
053 if (first == null) {
054 last = null;
055 count = 0;
056 }
057 return ret.element;
058 }
059
060 public int size()
061 {
062 return count;
063 }
064
065 public void clear()
066 {
067 while (first != null) {
068 ElementWrapper tmp = first;
069 first = first.next;
070 tmp.next = null;
071 }
072 first = last = null;
073 count = 0;
074 }
075
076 public Iterator iterator()
077 {
078 return new Iterator()
079 {
080 ElementWrapper tmp = first;
081
082 public boolean hasNext()
083 {
084 return tmp != null;
085 }
086
087 public Object next()
088 {
089 if (tmp == null) {
090 throw new NoSuchElementException();
091 }
092 Object ret = tmp.element;
093 tmp = tmp.next;
094 return ret;
095 }
096
097 public void remove()
098 {
099 throw new UnsupportedOperationException();
100 }
101 };
102 }
103
104 /**
105 * Lokale Wrapperklasse für die Queue-Elemente.
106 */
107 class ElementWrapper
108 {
109 public Object element;
110 public ElementWrapper next;
111 }
112 }
so erschien mir zeile 70 sinnvoller:
könnt ihr mir die Methode erklären, oder hab ich da etwa nen Fehler entdeckt?
Aber ich verstehe es nicht.
Und zwar im Listing 15.4: Die Klasse LinkedQueue:
001 /* LinkedQueue.java */
002
003 import java.util.*;
004
005 /**
006 * Die folgende Klasse realisiert eine Queue-Collection
007 * auf der Basis einer einfach verketteten linearen Liste.
008 * Die LinkedQueue kann im Prinzip beliebig viele Elemente
009 * aufnehmen. Die Laufzeiten der Einfüge- und Löschmethoden
010 * sind O(1). Der von iterator() gelieferte Iterator
011 * besitzt KEINE Implementierung der Methode remove().
012 */
013 public class LinkedQueue
014 implements Queue
015 {
016 protected ElementWrapper first;
017 protected ElementWrapper last;
018 protected int count;
019
020 public LinkedQueue()
021 {
022 first = last = null;
023 count = 0;
024 }
025
026 public boolean add(Object o)
027 {
028 if (count == 0) {
029 //insert first element
030 first = new ElementWrapper();
031 last = first;
032 count = 1;
033 } else {
034 //insert element into non-empty queue
035 last.next = new ElementWrapper();
036 last = last.next;
037 ++count;
038 }
039 last.element = o;
040 last.next = null;
041 return true;
042 }
043
044 public Object retrieve()
045 throws NoSuchElementException
046 {
047 if (count <= 0) {
048 throw new NoSuchElementException();
049 }
050 ElementWrapper ret = first;
051 --count;
052 first = first.next;
053 if (first == null) {
054 last = null;
055 count = 0;
056 }
057 return ret.element;
058 }
059
060 public int size()
061 {
062 return count;
063 }
064
065 public void clear()
066 {
067 while (first != null) {
068 ElementWrapper tmp = first;
069 first = first.next;
070 tmp.next = null;
071 }
072 first = last = null;
073 count = 0;
074 }
075
076 public Iterator iterator()
077 {
078 return new Iterator()
079 {
080 ElementWrapper tmp = first;
081
082 public boolean hasNext()
083 {
084 return tmp != null;
085 }
086
087 public Object next()
088 {
089 if (tmp == null) {
090 throw new NoSuchElementException();
091 }
092 Object ret = tmp.element;
093 tmp = tmp.next;
094 return ret;
095 }
096
097 public void remove()
098 {
099 throw new UnsupportedOperationException();
100 }
101 };
102 }
103
104 /**
105 * Lokale Wrapperklasse für die Queue-Elemente.
106 */
107 class ElementWrapper
108 {
109 public Object element;
110 public ElementWrapper next;
111 }
112 }
so erschien mir zeile 70 sinnvoller:
Code:
[070 tmp=null;
könnt ihr mir die Methode erklären, oder hab ich da etwa nen Fehler entdeckt?