APL/DEV 3.2/TP03/Luminance/ListChain.java

154 lines
3.3 KiB
Java
Raw Normal View History

2022-10-21 16:11:26 +02:00
import java.util.*;
public class ListChain<E> implements Collection<E> {
ChainLink<E> firstElement;
ChainLink<E> lastElement;
@Override
public boolean add(E e) {
if (firstElement == null) {
firstElement = new ChainLink<E>(e);
lastElement = firstElement;
} else {
ChainLink<E> newElement = new ChainLink<E>(e);
lastElement.setNext(newElement);
lastElement = newElement;
}
return true;
}
@Override
public boolean addAll(Collection<? extends E> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public void clear() {
firstElement = null;
lastElement = null;
}
@Override
public boolean contains(Object o) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean containsAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public Iterator<E> iterator() {
Iterator<E> e = new Iterator<E>() {
ChainLink<E> firstE = firstElement;
@Override
public boolean hasNext() {
return firstE.getNext() != null;
}
@Override
public E next() {
E v = firstE.getValue();
firstE = firstE.getNext();
return v;
}
};
return e;
}
@Override
public boolean remove(Object o) {
return false;
}
public boolean remove(int n) {
ChainLink<E> prev = firstElement;
if (n == 0) {
firstElement = prev.getNext();
prev = null;
return true;
}
for (int i = 0; i < n-1; i++) {
if (prev.getNext() != null) {
prev = prev.getNext();
} else {
return false;
}
}
ChainLink<E> toRemove = prev.getNext();
if (toRemove.getNext() == null) return false;
prev.setNext(toRemove.getNext());
toRemove = null;
return true;
}
@Override
public boolean removeAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean retainAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
@Override
public int size() {
int count = 1;
if (firstElement == null) return 0;
ChainLink<E> c = firstElement;
while (c.getNext() != null) {
c = c.getNext();
count++;
}
return count;
}
@Override
public Object[] toArray() {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T[] toArray(T[] a) {
// TODO Auto-generated method stub
return null;
}
public E get(int n) {
ChainLink<E> e = firstElement;
for (int i = 0; i < n; i++) {
if (e.getNext() != null) {
e = e.getNext();
}
}
return e.getValue();
}
}