In dieser Aufgabe sollen Sie eine eigene Implementierung einer Array-basierten Liste entsprechend der Spezifikation in einer Schnittstelle implementieren. Hierzu sei die folgende Schnittstelle gegeben:
package name.panitz.util;
import java.util.Comparator;
import java.util.function.Consumer;
import java.util.function.Predicate;
public interface List<E> {
int size();
E get(int i) ;
void add(E e);
void addAll(List<E> cs);
void remove(int i);
void insert(int i, E e);
boolean contains(E e);
boolean containsWith(Predicate<E> pred);
void reverse();
void forEach(Consumer<? super E> consumer);
boolean startsWith(List<E> that);
boolean endsWith(List<E> that);
List<E> sublist(int i, int l);
void sortBy(Comparator<? super E> cmp);
}
Dabei seien die einzelnen Methoden wie folgt spezifiziert:
- void addAll(List<E> cs):
Alle Elemente der übergenenen Liste sollen in die Liste hinten hinzugefügft werden.
- void remove(int i):
das Element am übergebenen Index soll gelöscht werden, sofern dieser Index existiert. Die Liste wird um 1 kürzer und alle nachfolgenden Elemente rutschen in der Liste eine Position nach vorne.
- void insert(int i, E e):
das Element soll an dem übergebenen Index eingefügt werden. Ist der Index zu groß, wird am Ende der Liste eingefügt. Ist der Index negativ, so ändert sich die Liste nicht.
- boolean contains(E e);:
ist genau dann wahr, wenn ein Element dem Parameter gleicht.
- boolean containsWith(Predicate<E> pred):
Ist genau dann wahr, wenn ein Element das übergebene Prädikat erfüllt.
- void reverse();:
Ändert die Reihenfolge der Liste, indem diese umgedreht wird.
- void forEach(Consumer<? super E> consumer);:
Die übergenene Konumentenfunktion wird für alle Elemente durchgeführt.
- boolean startsWith(List<E> that):
Genau dann wahr, wenn die übergebene Liste ein Präfix dieser Liste ist.
- boolean endsWith(List<E> that):
Genau dann wahr, wenn die übergebene Liste eine Endliste dieser Liste ist.
- List<E> sublist(int i, int l);:
Eine neue Teilliste dieser Liste. Die neue Liste habe die Länge l und besteht aus den Elementen ab Index i von dieser Liste. Ist l zu lang, sor wird eine kürzere Teilliste erzeugt.
- void sortBy(Comparator<? super E> cmp);:
Die Liste wird sortiert. Als Sortierfunktion wird der übergenen Komperator verwendet. Sie können hierzu im Internet nach dem Bubble-Sort Algorithmus suchen, der mit Hilfe zweier Schweifen mehrfach über die Liste geht und benachbarte Element tausch, falls die in falscher Reihenfolge stehen.