[Java] Stack 과 Queue

이상현·2023년 10월 10일
0

Java

목록 보기
4/21
post-thumbnail

Stack과 Queue의 인터페이스인 List와 Collection에 대해서는 [Java] Collection 프레임워크 게시글을 참고하세요.

Stack 과 Queue

Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO (Last In First Out) 구조이고,

Queue는 처음에 저장한 데이터를 가장 먼저 꺼내는 FIFO (First In First Out) 구조이다.

Stack과 Queue List 인터페이스를 구현하기 때문에, 데이터의 순서가 유지되고, 데이터의 중복이 가능하다.

자바에서 스택과 큐는 어떻게 구현되어있고, 어떻게 사용하는지 알아보자.

Stack 생성

  • Stack<Integer> stack = new Stack<>();
    크기가 0인 정수 타입의 Stack 생성

Stack의 메서드

  • boolean empty()
    스택이 비어있는지 검사한다.
  • E peek()
    스택의 맨 위의 요소를 반환한다. 꺼내지는 않는다.
  • E pop()
    스택의 맨 위의 요소를 꺼내서 반환한다.
  • E push(E item)
    스택에 객체 item 을 저장한다.
  • int search(Object o)
    스택에서 객체 o의 위치를 반환. (배열과 다르게 위치가 1부터 시작한다.)
    못찾으면 -1 반환

Queue 생성

Queue는 Stack과 다르게 구현 클래스가 아니고 인터페이스이다.
그래서 Queue 인터페이스를 구현한 클래스 중 하나를 가져다 쓰면 되는데, 보통 LinkedList를 많이 사용한다.

  • Queue<Integer> queue = new LinkedList<>();
    크기가 0인 정수 타입의 queue 생성

Queue의 메서드

메서드는 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 순서로 출력
        }
    }
}

0개의 댓글