Stack과 Queue의 인터페이스인 List와 Collection에 대해서는 [Java] Collection 프레임워크 게시글을 참고하세요.
Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO (Last In First Out) 구조이고,
Queue는 처음에 저장한 데이터를 가장 먼저 꺼내는 FIFO (First In First Out) 구조이다.
Stack과 Queue List 인터페이스를 구현하기 때문에, 데이터의 순서가 유지되고, 데이터의 중복이 가능하다.
자바에서 스택과 큐는 어떻게 구현되어있고, 어떻게 사용하는지 알아보자.
Stack<Integer> stack = new Stack<>();
boolean empty()
E peek()
E pop()
E push(E item)
int search(Object o)
Queue는 Stack과 다르게 구현 클래스가 아니고 인터페이스이다.
그래서 Queue 인터페이스를 구현한 클래스 중 하나를 가져다 쓰면 되는데, 보통 LinkedList를 많이 사용한다.
Queue<Integer> queue = new LinkedList<>();
메서드는 Queue 인터페이스에 구현된 것 그대로 사용하면 된다.
boolean add(E e)
큐에 객체를 추가한다. 성공하면 true 반환, 실패하면 예외 발생
boolean offer(E e)
큐에 객체를 추가한다. 성공하면 true 반환, 실패하면 false 반환
E element()
큐의 다음 요소를 반환한다. 꺼내지는 않는다. 큐가 비어있을 시 예외 발생
E peek()
큐의 다음 요소를 반환한다. 꺼내지는 않는다. 큐가 비어있을 시 null 반환
E poll()
큐의 다음 요소를 꺼내서 반환한다. 큐가 비어있을 시 null 반환
E remove()
큐의 다음 요소를 꺼내서 반환한다. 큐가 비어있을 시 예외 발생
boolean isEmpty()
컬렉션이 비어있으면 true 반환
(Collection 인터페이스의 메서드)
import java.util.Queue;
import java.util.LinkedList;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
Queue<String> queue = new LinkedList<>();
stack.push("0");
stack.push("1");
stack.push("2");
queue.offer("0");
queue.offer("1");
queue.offer("2");
while (!stack.empty()) {
System.out.println(stack.pop()); // 2 1 0 순서로 출력
}
while (!queue.isEmpty()) {
System.out.println(queue.poll()); // 0 1 2 순서로 출력
}
}
}