title: Implementing stack using linked lists
body: <p>What's the best way to implement a stack using linked lists in Java?</p>
  
  <p>EDIT: I would define best as most efficient using clean code. I have already used an array to implement a stack, but am not familiar with link lists so was wondering if anyone could help me implement something similar to below:</p>
  
  <pre><code>public class StackArray{
  
      private Object [] objArray;
      private int stackSize;
  
      public StackArray(){
          objArray = new Object[50];
          stackSize = 0;
      }
  
      public StackArray(int size){
          objArray = new Object[size];
          stackSize = 0;
      }
  
      //public interface methods - push, pop, top, empty &amp; clear
      public void push(Object o)throws StackArrayException{
          if(stackSize &lt; objArray.length){
              objArray[stackSize] = o;
              stackSize ++;
          }else{
              throw new StackArrayException("Stack Overflow");
          }
      }
  
      public Object pop()throws StackArrayException{
          if(stackSize != 0){
              stackSize--;
              return(objArray[stackSize]);
          }else{
              throw new StackArrayException("Stack Underflow");
          }
      }
  
      public void top() throws StackArrayException{
          if(stackSize != 0){
              return(objArray[stackSize-1]);
          }else{
              throw new StackArrayException("Stack Underflow");
          }
      }
  
      public boolean empty(){
          return (stackSize == 0):
      }
  
      public void clear(){
          stackSize = 0;
      }
  }
  </code></pre>
  
  <p>EDIT: Here is the linked list implementation if anyone is interested..</p>
  
  <pre><code>public class StackList{
      private Node listHead;
  
      protected class Node{
      protected Object datum;
      protected Node next;
  
      public Node(Object o, Node n){
          datum = o;
          next = n;
      }
  
      public StackList(){
          listHead = null;
      }
  
      //public interface methods - push pop top empty clear
      public void push(Object o){
          listHead = new Node(o, listHead);
      }
  
      public Object pop() throws StackListException{
          if(listHead!=null){
              Object top = listHead.datum;
              listHead = listHead.next;
              return top;
          }else{
              throw new StackListException("Stack Underflow");
          }
      }
  
      public Object top()throws StackListException{
          if(listHead != null){
              return(listHead.datum);
          }else{
              throw new StackListException("Stack Underflow");
          }
      }
  
      public boolean empty(){
          return (listHead == null);
      }
  
      public void clear(){
          listHead = null;
      }
  }
  </code></pre>