본문으로 바로가기

[Java] LIFO 스택, FIFO 큐 (Stack, Queue)

category Backend/Java 2022. 2. 11. 14:52

1. Stack

Stack

  • 후입 선출(Last In First Out) 자료구조
  • 나중에 넣은 객체가 먼저 빠져나가는 자료구조
  • Ex) JVM Stack Memory → Stack Memory에 저장된 변수는 나중에 저장된 것부터 제거됩니다.

 

Java Stack 기능

E push(E item) → 해당 객체를 스택에 넣습니다.

E peek() → 스택의 맨 위 객체(first)를 반환합니다. (객체를 스택에서 제거 X)

E pop() → 스택의 맨 위 객체(first)를 반환합니다. (객체를 스택에서 제거 O)

// LIFO Stack
Stack<Integer> stack = new Stack<>();

// push
stack.push(1);
stack.push(2);
stack.push(3);

// peek
System.out.println(stack.peek()); // 3

// pop Loop(stack 은 Vector를 상속받기 때문에 List 인터페이스의 기능을 사용할 수 있습니다.)
while (!stack.isEmpty()) {
    System.out.println(stack.pop()); // 3 2 1
}

 

2. Queue

Queue

  • 선입선출(First In First Out) 자료구조
  • 먼저 넣은 객체가 먼저 빠져나가는 구조
  • Ex) Thread Pool(ExecutorService) 작업 큐 → 먼저 들어온 작업부터 처리합니다.
  • Queue 인터페이스를 구현한 클래스는 LinkedList입니다.

 

Java Queue 기능

boolean offer(E e) → 해당 객체를 넣습니다.

E peek() → 큐에서 먼저 들어온 객체를 반환합니다. (큐에서 삭제 X)

E poll() → 큐에서 먼저 들어온 객체를 반환합니다. (큐에서 삭제 O)

// FIFO Queue
Queue<Integer> queue = new LinkedList();

// offer
queue.offer(1);
queue.offer(2);
queue.offer(3);

// peek
System.out.println(queue.peek()); // 1

// poll
while (!queue.isEmpty()) {
    System.out.println(queue.poll()); // 1 2 3
}