1. Introduction
Stack is a last-in-first-out (LIFO) stack of objects. Stack class is a part of collection framework. Elements can in inserted and retrieved at only one end of the Stack. Stack in Java is represented by java.util.Stack class. The java.util.Stack class extends java.util.Vector. Stack implements following interfaces:
- Serializable
- Cloneable
- Iterable<E>
- Collection<E>
- List<E>
- RandomAccess
A stack of plates in a cupboard is a real life example of Stack. The last plate put at the top of stack is taken out first for use.

By default, there are no items in Stack, i.e. when first created, it contains no items. Stack only provides few basic operations whereas Deque interface provides more complete and consistent set of LIFO stack operations and should be preferred whenever LIFO collection is required.
2. Constructor
Stack(): The constructor creates an empty stack.
Stack stack = new Stack();
You can use generics with Stack:
Stack<String> stack = new Stack();
3. Methods of Stack
3.1 push()
E push(E item): Pushes an item onto the top of the stack.
stack.push("one");
stack.push("two");
stack.push("three");
3.2 pop()
E pop(): Removes the object at the top of the stack and returns that object.
stack.pop();
3.3 peek()
E peek(): Returns the object at the top of this stack without removing it from the stack.
stack.peek()
3.4 empty()
boolean empty(): Returns true if the stack is empty else returns false.
stack.empty();
3.5 search()
int search(Object o): Returns 1 based index of found element else returns -1. The index starts with the top with value 1 i.e. top has index of 1, second element from the top has index of 2 and so on.
stack.search("one");
4. Iterating a Stack
You can use the Iterator to iterate a Stack just like any other collection.
Iterator<String> itr = stack.iterator();
while (itr.hasNext()) {
String element = itr.next();
System.out.println(element);
}
Lambda function introduced in Java 8 can also be used to iterate a Stack:
stack.stream().forEach(System.out::println);
5. Example
import java.util.Iterator;
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<String> stack = new Stack();
// push three elements in the stack
stack.push("one");
stack.push("two");
stack.push("three");
System.out.println(stack); // [one, two, three]
// pop one element from the top
stack.pop();
System.out.println(stack); // [one, two]
// check top element
String topElement = stack.peek();
System.out.println(topElement); // two
// search element "one" in stack
int result = stack.search("two");
System.out.println(result); // 1
// iterating a stack
Iterator<String> itr = stack.iterator();
while (itr.hasNext()) {
String element = itr.next();
System.out.println(element);
}
// iterating a stack using lambda function
stack.stream().forEach(System.out::println);
}
}
