package com.pop.practice.homework.first.collection.stack;
import java.io.Serializable;
import com.pop.practice.homework.first.collection.AbstractCollection;
import com.pop.practice.homework.first.collection.Iterator;
import com.pop.practice.homework.first.collection.list.LinkedList;
import com.pop.practice.homework.first.collection.list.List;
/**
* @author haipop Date: 17-2-16 Time: 下午6:33
*/
public class LinkStack<T> extends AbstractCollection<T> implements Stack<T>, Serializable {
private static final long serialVersionUID = -2813631170103864318L;
/**
* 数据存储
*/
private List<T> cache;
/**
* 数据量
*/
private int size;
/**
* 遍历器
*/
private Iterator iterator;
public LinkStack() {
this.size = 0;
this.cache = new LinkedList<T>();
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public int size() {
return size;
}
@Override
public void push(T element) throws IllegalAccessException {
this.cache.add(element);
size++;
}
@Override
public void add(T element) throws IllegalAccessException {
this.cache.add(element);
size++;
}
@Override
public T pull() throws IndexOutOfBoundsException {
T result = this.cache.get(size - 1);
size--;
return result;
}
@Override
public void remove(T element) {
cache.remove(element);
size--;
}
@Override
public int contain(T element) {
return cache.contain(element);
}
@Override
public Iterator iterator() {
this.iterator = this.cache.iterator();
return iterator;
}
@Override
public boolean hasNext() {
return this.iterator.hasNext();
}
@Override
@SuppressWarnings("unchecked")
public T next() {
return (T) this.iterator.next();
}
}