java.util.Stack versus ArrayDeque used as a stack
=================================================

ArrayDeque as a stack: push(1), push(2), push(3), then pop until empty -> [3, 2, 1]
ArrayDeque as a queue: offer(1), offer(2), offer(3), then poll until empty -> [1, 2, 3]

push(1), push(2), push(3), then iterate:
  java.util.Stack  -> [1, 2, 3]   (bottom to top)
  ArrayDeque       -> [3, 2, 1]   (top to bottom)

Stack.class.getSuperclass()        = java.util.Vector
Stack.pop() is synchronized        = true
ArrayDeque.pop() is synchronized   = false

push(null) on Stack      = accepted
push(null) on ArrayDeque = java.lang.NullPointerException

ArrayDeque: push(1), push(2), peek() = 2   (push is addFirst)
ArrayDeque: offer(1), offer(2), peek() = 1   (offer is addLast)
