Subato

Resource Files

Array-basierte Liste

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]; } }
java