Implement a Stack Using an Array in Java

This post shows how to implement a stack by using an array.

The requirements of the stack are: 1) the stack has a constructor which accept a number to initialize its size, 2) the stack can hold any type of elements, 3) the stack has a push() and a pop() method.

I remember there is a similar example in the "Effective Java" book written by Joshua Bloch, but not sure how the example is used. So I just write one and then read the book, and see if I miss anything.

1. A Simple Stack Implementation

public class Stack<E> {
	private E[] arr = null;
	private int CAP;
	private int top = -1;
	private int size = 0;
 
	@SuppressWarnings("unchecked")
	public Stack(int cap) {
		this.CAP = cap;
		this.arr = (E[]) new Object[cap];
	}
 
	public E pop() {
		if(this.size == 0){
			return null;
		}
 
		this.size--;
		E result = this.arr[top];
		this.arr[top] = null;//prevent memory leaking
		this.top--;
 
		return result;
	}
 
	public boolean push(E e) {
		if (!isFull())
			return false;
 
		this.size++;
		this.arr[++top] = e;
		return false;
	}
 
	public boolean isFull() {
		if (this.size == this.CAP)
			return false;
		return true;
	}
 
	public String toString() {
		if(this.size==0){
			return null;
		}
 
		StringBuilder sb = new StringBuilder();
		for(int i=0; i<this.size; i++){
			sb.append(this.arr[i] + ", ");
		}
 
		sb.setLength(sb.length()-2);
		return sb.toString();	
	}
 
	public static void main(String[] args) {
 
		Stack<String> stack = new Stack<String>(11);
		stack.push("hello");
		stack.push("world");
 
		System.out.println(stack);
 
		stack.pop();
		System.out.println(stack);
 
		stack.pop();
		System.out.println(stack);
	}
}

Output:

hello, world
hello
null

2. Information from "Effective Java"

It turns out I don't need to improve anything. There are some naming differences but overall my method is ok.

This example occurs twice in "Effective Java". In the first place, the stack example is used to illustrate memory leak. In the second place, the example is used to illustrate when we can suppress unchecked warnings.

Do you wonder how to implement a queue by using an array?

Category >> Algorithms  
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
<pre><code> 
String foo = "bar";
</code></pre>
  • HP

    Only minor observation, you have inverted the logic for your isFull() function. Should probably be:

    ”’
    public boolean isFull() {
    if (this.size == this.cap)
    return true; //it is full in this case
    return false;
    }
    ”’

    then on the push(E e) function:
    ”’
    public boolean push(E e) {
    if ( isFull() )
    return false;
    this.size++;
    this.arr[++top] = e;
    return false;
    }
    ”’

    Nice simple example anyway.

  • Aiden Zou

    Since a field ‘top’ exists, there is no need to maintain the stack’s size, hence the field ‘size’.