6 changed files with 287 additions and 0 deletions
			
			
		@ -0,0 +1,11 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			|||
<projectDescription> | 
				
			|||
	<name>oop_crashkurs</name> | 
				
			|||
	<comment></comment> | 
				
			|||
	<projects> | 
				
			|||
	</projects> | 
				
			|||
	<buildSpec> | 
				
			|||
	</buildSpec> | 
				
			|||
	<natures> | 
				
			|||
	</natures> | 
				
			|||
</projectDescription> | 
				
			|||
@ -0,0 +1,5 @@ | 
				
			|||
package solution; | 
				
			|||
 | 
				
			|||
public interface ICommand<E> { | 
				
			|||
	void execute(E e); | 
				
			|||
} | 
				
			|||
@ -0,0 +1,47 @@ | 
				
			|||
package solution; | 
				
			|||
 | 
				
			|||
import java.util.Collection; | 
				
			|||
import java.util.Comparator; | 
				
			|||
import java.util.Iterator; | 
				
			|||
 | 
				
			|||
public interface ISimpleList<E> { | 
				
			|||
	int size(); // Anzahl der Elemente in der Liste
 | 
				
			|||
 | 
				
			|||
	boolean add(E e); // fügt das Element e am Ende der Liste ein, sofern es ungleich null ist:
 | 
				
			|||
						// Liefert true, falls ein Element eingefügt wurde (false sonst)
 | 
				
			|||
 | 
				
			|||
	boolean add(Collection<E> c); // fügt alle Elemente der Collection c ein (sofern diese nicht null sind).
 | 
				
			|||
 | 
				
			|||
	boolean contains(Object o); // prüft, ob das Objekt o in der Liste enthalten ist (o == null führt zur
 | 
				
			|||
								// Rückgabe false)
 | 
				
			|||
 | 
				
			|||
	boolean remove(Object o); // entfernt das Objekt o aus der Liste // true: Ein Element wurde entfernt,
 | 
				
			|||
								// false sonst
 | 
				
			|||
 | 
				
			|||
	void forAll(ICommand<E> command); // Durchläuft alle Elemente der Liste und wendet command.execute auf jedes
 | 
				
			|||
										// Element an
 | 
				
			|||
 | 
				
			|||
	default void add(int i, E e) throws IndexOutOfBoundsException { | 
				
			|||
			} // fügt das Element an der Position i ein, sofern es
 | 
				
			|||
		// nicht null ist und 0 <= i <= Anzahl an Elementen
 | 
				
			|||
		// gilt. Rückgabe true, false sonst.
 | 
				
			|||
 | 
				
			|||
	default E get(int i) throws IndexOutOfBoundsException { | 
				
			|||
		return null; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
// Liefert das Element, das an Position i steht, null falls i keinen gültigen Index darstellt.
 | 
				
			|||
	default void set(int i, E e) throws IndexOutOfBoundsException { | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
// Ersetzt das i-te Element durch e, sofern es vorhanden ist (Index gültig)
 | 
				
			|||
	default boolean remove(int i) { | 
				
			|||
		return false; | 
				
			|||
	} // Löscht das i-te Element, sofern der Index gültig ist. Rückgabe true, false
 | 
				
			|||
		// sonst.
 | 
				
			|||
 | 
				
			|||
	default void sort(Comparator<E> comparator) { | 
				
			|||
 | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
} | 
				
			|||
@ -0,0 +1,31 @@ | 
				
			|||
package solution; | 
				
			|||
 | 
				
			|||
public class Node<E> { | 
				
			|||
	private Node<E> predecessor; // Vorgänger
 | 
				
			|||
	private Node<E> successor; // Nachfolger
 | 
				
			|||
	private E payload; // Nutzlast
 | 
				
			|||
	 | 
				
			|||
	public Node(E payload) { | 
				
			|||
		super(); | 
				
			|||
		this.payload = payload; | 
				
			|||
	} | 
				
			|||
	public Node<E> getPredecessor() { | 
				
			|||
		return predecessor; | 
				
			|||
	} | 
				
			|||
	public void setPredecessor(Node<E> predecessor) { | 
				
			|||
		this.predecessor = predecessor; | 
				
			|||
	} | 
				
			|||
	public Node<E> getSuccessor() { | 
				
			|||
		return successor; | 
				
			|||
	} | 
				
			|||
	public void setSuccessor(Node<E> successor) { | 
				
			|||
		this.successor = successor; | 
				
			|||
	} | 
				
			|||
	public E getPayload() { | 
				
			|||
		return payload; | 
				
			|||
	} | 
				
			|||
	public void setPayload(E payload) { | 
				
			|||
		this.payload = payload; | 
				
			|||
	} | 
				
			|||
	 | 
				
			|||
} | 
				
			|||
@ -0,0 +1,182 @@ | 
				
			|||
package solution; | 
				
			|||
 | 
				
			|||
public class SimpleLinkedList11111<E> extends AbstractSimpleList<E> { | 
				
			|||
 | 
				
			|||
	private Node<E> firstNode; | 
				
			|||
	private int size; | 
				
			|||
 | 
				
			|||
	private Node<E> get(Object o) { | 
				
			|||
 | 
				
			|||
		if (firstNode == null) | 
				
			|||
			return null; | 
				
			|||
 | 
				
			|||
		boolean loop = true; | 
				
			|||
		Node<E> tmp = firstNode; | 
				
			|||
 | 
				
			|||
		while (loop) { // hier kann auf die Nutzlast zugegriffen werden (payolad) if(Nachfolger von
 | 
				
			|||
 | 
				
			|||
			if (o == null & tmp.getSuccessor() == null) { | 
				
			|||
				return tmp; | 
				
			|||
			} | 
				
			|||
 | 
				
			|||
			if (o != null & tmp.getPayload().equals(o)) { | 
				
			|||
				return tmp; | 
				
			|||
			} | 
				
			|||
 | 
				
			|||
			loop = tmp.getSuccessor() != null; | 
				
			|||
			tmp = tmp.getSuccessor(); | 
				
			|||
		} | 
				
			|||
		return null; | 
				
			|||
 | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	@Override | 
				
			|||
	public int size() { | 
				
			|||
		return size; | 
				
			|||
 | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	@Override | 
				
			|||
	public boolean add(E e) { | 
				
			|||
		if (e == null) | 
				
			|||
			return false; | 
				
			|||
		if (firstNode == null) { | 
				
			|||
			firstNode = new Node<E>(e); | 
				
			|||
			size++; | 
				
			|||
			return true; | 
				
			|||
		} | 
				
			|||
 | 
				
			|||
		boolean loop = true; | 
				
			|||
		Node<E> tmp = firstNode; | 
				
			|||
 | 
				
			|||
		while (loop) { | 
				
			|||
 | 
				
			|||
			loop = tmp.getSuccessor() != null; | 
				
			|||
 | 
				
			|||
			if (!loop) { | 
				
			|||
				Node<E> tmp2 = new Node<E>(e); | 
				
			|||
				tmp.setSuccessor(tmp2); | 
				
			|||
				tmp2.setPredecessor(tmp); | 
				
			|||
				size++; | 
				
			|||
				return true; | 
				
			|||
			} | 
				
			|||
 | 
				
			|||
			tmp = tmp.getSuccessor(); | 
				
			|||
		} | 
				
			|||
		return false; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	@Override | 
				
			|||
	public boolean contains(Object o) { | 
				
			|||
//		return this.get(o) != null;
 | 
				
			|||
 | 
				
			|||
		if (o == null) | 
				
			|||
			return false; | 
				
			|||
		Node<E> currentNode = firstNode; | 
				
			|||
		while (currentNode != null) { | 
				
			|||
			if (o.equals(currentNode.getPayload())) { | 
				
			|||
				return true; | 
				
			|||
			} | 
				
			|||
			currentNode = currentNode.getSuccessor(); | 
				
			|||
		} | 
				
			|||
		return false; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	@Override | 
				
			|||
	public boolean remove(Object o) { | 
				
			|||
//		if(this.contains(o)) {
 | 
				
			|||
//			this.get(o).setPayload(null);
 | 
				
			|||
//			return true;
 | 
				
			|||
//		};
 | 
				
			|||
//		return false;
 | 
				
			|||
//		
 | 
				
			|||
		if (o == null) | 
				
			|||
			return false; | 
				
			|||
		Node<E> currentNode = firstNode; | 
				
			|||
 | 
				
			|||
		while (currentNode != null) { | 
				
			|||
			if (o.equals(currentNode.getPayload())) { | 
				
			|||
				currentNode.setPayload(null); | 
				
			|||
				size--; | 
				
			|||
				return true; | 
				
			|||
			} | 
				
			|||
			currentNode = currentNode.getSuccessor(); | 
				
			|||
		} | 
				
			|||
		return false; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	@Override | 
				
			|||
	public void forAll(ICommand<E> command) { | 
				
			|||
		if (command != null) { | 
				
			|||
			Node<E> currentNode = firstNode; | 
				
			|||
			while (currentNode != null) { | 
				
			|||
				command.execute(currentNode.getPayload()); | 
				
			|||
				currentNode = currentNode.getSuccessor(); | 
				
			|||
			} | 
				
			|||
		} | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	private Node<E> getIndex(int i) { | 
				
			|||
		Node<E> currentNode = firstNode; | 
				
			|||
		int currIndex = 0; | 
				
			|||
		while (currentNode != null) { | 
				
			|||
 | 
				
			|||
			if (currIndex >= i) { | 
				
			|||
				if (currentNode.getPayload() != null) { | 
				
			|||
					return currentNode; | 
				
			|||
				} | 
				
			|||
			} | 
				
			|||
			currentNode = currentNode.getSuccessor(); | 
				
			|||
			currIndex++; | 
				
			|||
		} | 
				
			|||
		return null; | 
				
			|||
 | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	public E get(int i) throws IndexOutOfBoundsException { | 
				
			|||
		return getIndex(i).getPayload(); | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	public void set(int i, E e) throws IndexOutOfBoundsException { | 
				
			|||
		getIndex(i).setPayload(e); | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	public void add(int i, E e) throws IndexOutOfBoundsException { | 
				
			|||
		if (size == 0) { | 
				
			|||
			if (i != 0) { | 
				
			|||
				throw new IndexOutOfBoundsException("Index " + " out of bounds!"); | 
				
			|||
			} | 
				
			|||
			set(0, e); | 
				
			|||
		} else if (i == size) { | 
				
			|||
			add(e); | 
				
			|||
		} else if (size > 0 && i < size) { | 
				
			|||
			Node<E> newNode = new Node<E>(e); | 
				
			|||
			Node<E> tempNode = getIndex(i); | 
				
			|||
			Node<E> preTempNode = getIndex(i).getPredecessor(); | 
				
			|||
 | 
				
			|||
			preTempNode.setSuccessor(newNode); | 
				
			|||
			newNode.setPredecessor(preTempNode); | 
				
			|||
			newNode.setSuccessor(tempNode); | 
				
			|||
			tempNode.setPredecessor(newNode); | 
				
			|||
		} | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	private void checkIndex(int i) throws IndexOutOfBoundsException { | 
				
			|||
		if (i < 0 | i > size) { | 
				
			|||
			throw new IndexOutOfBoundsException(); | 
				
			|||
		} | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
	public boolean remove(int i) throws IndexOutOfBoundsException { | 
				
			|||
		this.checkIndex(i); | 
				
			|||
 | 
				
			|||
		if (getIndex(i) != null) { | 
				
			|||
			getIndex(i).setPayload(null); | 
				
			|||
			size--; | 
				
			|||
			return true; | 
				
			|||
		} | 
				
			|||
 | 
				
			|||
		return false; | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
} | 
				
			|||
@ -0,0 +1,11 @@ | 
				
			|||
package solution; | 
				
			|||
 | 
				
			|||
public class SimpleLinkedListTest11111 extends SimpleListTest90 { | 
				
			|||
 | 
				
			|||
	@Override | 
				
			|||
	protected ISimpleList<String> getInstance1() { | 
				
			|||
		// TODO Auto-generated method stub
 | 
				
			|||
		return new SimpleLinkedList11111<String>(); | 
				
			|||
	} | 
				
			|||
 | 
				
			|||
} | 
				
			|||
					Loading…
					
					
				
		Reference in new issue