Consider Bloch's non-generic Stack
implementation;
public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push (Object e) { ensureCapacity(); elements[size++] = e; } public Object pop () { if (size == 0) throw new IllegalStateException("Stack.pop"); Object result = elements[--size]; elements[size] = null; // Eliminate obsolete reference return result; } private void ensureCapacity() { if (elements.length == size) { Object oldElements[] = elements; elements = new Object[2*size + 1]; System.arraycopy(oldElements, 0, elements, 0, size); } } }
Stack
to be immutable.
Keep the representation variables elements
and size
.
Focus on Liskov's rules; you can ignore Bloch's rules for now.
push()
.
pop()
.