본문 바로가기
코딩테스트 및 알고리즘

Queue

by 영카이브 2024. 1. 20.

Queue란?

  • FIFO로 처음에 저장한 데이터를 가장 먼저 꺼낸다.

 

Queue의 장점

  • 요청받은 순서대로 요청을 처리하기때문에 비동기식요청을 처리할 때 유용하다.
  • ex) 이륙을 기다리는 비행기 or 의사를 기다리는 환자

 

Queue 메서드

  • boolean add(Object object) : 지정된 객체를 큐에 추가하고 성공하면 true, 큐가 꽉 찬 경우 IllegalStateException에러 발생
  • boolean offer() : 지정된 객체를 큐에 추가하고 성공하면 true, 큐가 꽉 찬 경우 false 반환
  • Object peek() : 삭제없이 요소를 읽는다. 비어있으면 null을 반환한다.
  • Object remove() : 큐에서 객체를 꺼내서 반환한다.  비어있으면 NoSuchElementException 에러 발생
  • Object poll() : 큐에서 객체를 꺼내서 반환한다. 비어있으면 null을 반환한다.
  • Object clear() : 큐 비우기

 

Queue 사용법

  • 최근사용문서
  • 인쇄대기목록
  • 버퍼(buffer)

 

최근사용문서 예시

public class RecentDocumentsQueue {
    private Queue<String> recentDocuments;
    private int maxSize;  // 큐의 최대 크기

    public RecentDocumentsQueue(int maxSize) {
        this.recentDocuments = new LinkedList<>();
        this.maxSize = maxSize;
    }

    // 문서를 큐에 추가
    public void addDocument(String document) {
        // 큐의 크기가 최대 크기를 초과하면 가장 오래된 문서를 제거
        while (recentDocuments.size() >= maxSize) {
            recentDocuments.poll();
        }
        recentDocuments.offer(document);
    }

    // 최근 사용 문서 목록 출력
    public void printRecentDocuments() {
        System.out.println("Recent Documents:");
        for (String document : recentDocuments) {
            System.out.println(document);
        }
        System.out.println("---------------");
    }

    public static void main(String[] args) {
        RecentDocumentsQueue recentDocumentsQueue = new RecentDocumentsQueue(3);

        recentDocumentsQueue.addDocument("Document A");
        recentDocumentsQueue.addDocument("Document B");
        recentDocumentsQueue.addDocument("Document C");

        recentDocumentsQueue.printRecentDocuments();

        recentDocumentsQueue.addDocument("Document D");
        recentDocumentsQueue.addDocument("Document E");

        recentDocumentsQueue.printRecentDocuments();
    }
}

 

출력결과

Recent Documents:

Document A

Document B

Document C

---------------

Recent Documents:

Document C

Document D

Document E

---------------