Da es sich bei einer Schlange um einen abstrakten Datentyp handelt, spielt es für die Funktionalität keine Rolle, wie die Elemente im Hintergrund verwaltet werden.
Die Elemente der Queue können auch in einem Array gespeichert werden. Dabei merkt man sich mit Hilfe zweier Attribute first
und last
, welcher Bereich des Arrays die Queue repräsentiert.
first
ist dabei sinnvollerweise inklusive gemeint, last
sollte eine exklusive Grenze sein (Beispiel 1).last
ins Array geschrieben und last
wird um 1 erhöht (Beispiel 2). first
und erhöht first
um 1 (Beispiel 4). Es stört nicht, dass der alte Wert weiterhin im Array steht – wir greifen nie wieder lesend auf ihn zu. Irgendwann wird der Wert wieder überschrieben.first
und last
gleich sind, ist das Array "voll" (Beispiel 5). Damit später weiterhin Elemente eingefügt werden können, muss das Array vergrößert werden. Man erzeugt ein neues Array, das z.B. doppelt so groß ist und kopiert die alten Werte ins neue Array. Dann passt man die Indizes first
und last
passend an.
Implementiere die Klasse ArrayQueue
nach diesem Prinzip und führe die Tests der zugehörigen Testklasse aus. Eine entsprechende Codevorlage findest du hier.
Hinweis: In Java kann man kein Array eines generischen Typs erzeugen. Stattdessen erzeugt man ein Object-Array und führt beim Auslesen einen Cast zum generischen Typ T aus:
Object[] daten = new Object[10]; ... T myValue = (T)daten[5];