public class MyStack implements Iterable{ private ArrayList stack = new ArrayList (); public MyStack(){ stack = new ArrayList (); } public MyStack(ArrayList stack){ this.stack = stack; } public void add(T element){ stack.add(element); } public void push(T element){ stack.add(0, element); } public T pop( ){ if(!stack.isEmpty()){ T element = stack.get(0); stack.remove(0); return element; } return null; } public T getFirstElement(){ return stack.get(0); } public int getSize(){ return stack.size(); } public boolean removeAt(int index) { if(index < stack.size()){ stack.remove(index); return true; } return false; } public void overrideStack(ArrayList element){ stack = new ArrayList(); } public boolean isEmpty(){ return stack.isEmpty(); } public T getElementAt(int index){ return stack.get(index); } public Iterator iterator() { return new StackIterator(); } public String toString(){ String value = ""; for(T stackElement : stack){ value+=stackElement.toString()+";"; } return value; } private class StackIterator implements Iterator { private int count=0; public boolean hasNext(){ if(count < stack.size()){ return true; } return false; } public void remove() { throw new UnsupportedOperationException(); } public T next() { if (!hasNext()) { throw new NoSuchElementException(); } T element = stack.get(count); count++; return element; } } }