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.
package name.panitz.util;
import java.util.Comparator;
import java.util.function.Consumer;
import java.util.function.Predicate;
public class AL<E> implements List<E> {
protected E[] store = (E[]) new Object[5];
protected int size = 0;
public AL(E... es) {
for (E e : es)
add(e);
}
private void mkNewStore() {
E[] newStore = (E[]) new Object[size + 5];
for (int i = 0; i < store.length; i++)
newStore[i] = store[i];
store = newStore;
}
public void add(E e) {
if (store.length <= size)
mkNewStore();
store[size++] = e;
}
public int size() {
return size;
}
public E get(int i) {
return store[i];
}
}