In our couple of previous articles, we have seen a different implementation of Stack such as
- Stack Implementation using Array in Java
- Dynamic Stack Implementation using Array in Java
- Stack Implementation using Linked List in Java
Why an ArrayList?
The primary advantage of using an ArrayList for stack implementation is its dynamic resizing capability. An ArrayList automatically grows when it reaches its capacity, ensuring that our stack won't run out of space (unless we exhaust available memory).
Stack Implementation using Array List in Java
Here's a simple demonstration of a stack implemented using an ArrayList:
import java.util.ArrayList;
public class StackUsingArrayList<T> {
private ArrayList<T> stackList;
// Constructor to initialize the stack
public StackUsingArrayList() {
stackList = new ArrayList<>();
}
// Function to check if the stack is empty
public boolean isEmpty() {
return stackList.isEmpty();
}
// Function to push an element onto the stack
public void push(T value) {
stackList.add(value);
}
// Function to pop an element from the stack
public T pop() {
if (isEmpty()) {
System.out.println("Stack is empty");
return null;
}
return stackList.remove(stackList.size() - 1);
}
// Function to get the top element of the stack without popping it
public T peek() {
if (isEmpty()) {
System.out.println("Stack is empty");
return null;
}
return stackList.get(stackList.size() - 1);
}
}
Testing the Stack:
public class Main {
public static void main(String[] args) {
StackUsingArrayList<Integer> stack = new StackUsingArrayList<>();
stack.push(10);
stack.push(20);
stack.push(30);
System.out.println("Top element: " + stack.peek()); // Outputs: 30
System.out.println("Popped element: " + stack.pop()); // Outputs: 30
System.out.println("Top element after pop: " + stack.peek()); // Outputs: 20
}
}
Output:
Top element: 30
Popped element: 30
Top element after pop: 20
Conclusion
Implementing a stack using an ArrayList in Java is straightforward and takes advantage of the dynamic resizing and various in-built methods of the ArrayList. However, remember that while dynamic resizing offers flexibility, it comes with the cost of occasional resizing operations, which can be computationally expensive. As always, choose your data structure based on the specific requirements and constraints of your application.
Comments
Post a Comment
Leave Comment