[JAVA] 64. Queue

문정준's avatar
Feb 19, 2025
[JAVA] 64. Queue
큐 (Queue)
데이터를 처리하기 전 잠시 저장하는 자료구조
원소를 FIFO 형식으로 저장
 

1. Queue

  • 데이터를 처리하기 전 잠시 저장하는 자료구조
  • tail에서 데이터를 받고 head에서 처리
  • FIFO (First In First Out) 구조
  • ArrayDeque, LinkedList, PriorityQueue가 존재
    • 디큐 (Deque)는 전단과 후단에서 모두 데이터 추가, 삭제 가능
  • add() : 큐의 용량이 초과되지 않으면 원소 추가
    • 넘어갈 경우 IllegalStateException 오류 발생
    • offer() 메소드는 원소 추가가 실패하면 false 반환
  • remove(), poll() : 큐의 처음 원소를 제거하거나 가져옴
    • remove()는 원소가 큐에 없을 경우 NoSuchElementException 발생
    • poll()은 원소가 큐에 없을 경우 null 반환
  • element(), peek() : 큐의 맨 처음 원소를 삭제하지 않고 가져옴
    • element()는 원소가 큐에 없을 경우 NoSuchElementException 발생
    • peek()는 원소가 큐에 없을 경우 null 반환
 
package ex18; import java.util.LinkedList; import java.util.Queue; public class QueueTest { public static void main(String[] args) { Queue<Integer> q = new LinkedList<>(); // 0 ~ 4까지 큐에 추가 for (int i = 0; i < 5; i++) q.add(i); System.out.println("큐의 요소 : " + q); // 맨 앞의 원소(0) 제거 int e = q.remove(); System.out.println("삭제된 요소 : " + e); System.out.println(q); } }
notion image
 

2. PriorityQueue

  • 원소가 무작위로 삽입돼도 정렬된 상태로 원소를 추출
  • remove() 호출 시마다 가장 작은 원소가 추출
    • 힙(heap)을 내부적으로 사용
    • add(), remove() 호출 시 가장 작은 원소가 트리의 루트로 이동하는 이진 트리 구조
 
package ex18; import java.util.PriorityQueue; public class PriorityQueueTest { public static void main(String[] args) { PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); pq.add(30); pq.add(80); pq.add(20); System.out.println(pq); // 숫자를 대입한 순서에 상관없이 가장 작은 원소가 제거 System.out.println("삭제된 요소 : " + pq.remove()); } }
notion image
Share article

sxias