큐는 데이터를 저장하고 접근하는 자료구조로, 선입선출(FIFO, First In, First Out)의 원칙을 따른다. 가장 먼저 삽입된 데이터가 가장 먼저 제거되는 구조를 갖는다.
FIFO 구조: 가장 먼저 삽입된 항목이 가장 먼저 제거됨.
두 개의 끝에서 연산 수행: 데이터의 삽입은 한 쪽 끝에서, 삭제는 다른 쪽 끝에서 이루어짐.
제한된 접근: 주로 enqueue(삽입)와 dequeue(삭제) 두 가지 기본 연산으로 조작되며, 일반적으로 중간의 특정 원소에 직접 접근하는 것은 허용되지 않음.
자연스러운 순서 유지: 데이터가 삽입된 순서대로 제거되므로, 일부 상황에서 자연스러운 순서를 유지할 수 있다.
너비 우선 탐색(BFS)에 유용: 그래프와 같은 자료구조에서 BFS 알고리즘에 사용된다.
선언 :
import java.util.Queue;
import java.util.LinkedList;
Queue<자료형> 변수명 = new LinkedList<>();
사용 예시 :
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// 큐 생성
Queue<Integer> queue = new LinkedList<>();
// 1. Enqueue: 데이터 추가
queue.offer(1);
queue.offer(2);
queue.offer(3);
// 2. Front: 큐의 맨 앞에 있는 데이터 확인 (제거하지 않음)
int frontElement = queue.peek();
System.out.println("Front Element: " + frontElement);
// 3. Dequeue: 큐에서 데이터 제거 및 반환
int removedElement = queue.poll();
System.out.println("Removed Element: " + removedElement);
// 4. Size: 큐의 크기 확인
int size = queue.size();
System.out.println("Queue Size: " + size);
// 5. Is Empty: 큐가 비어있는지 여부 확인
boolean isEmpty = queue.isEmpty();
System.out.println("Is Queue Empty? " + isEmpty);
// 6. Search: 특정 값이 큐에 있는지 확인 (인덱스 반환, 없으면 -1)
int searchResult = queue.indexOf(2);
System.out.println("Index of 2: " + searchResult);
// 7. Contains: 특정 값이 큐에 있는지 확인 (true 또는 false 반환)
boolean containsResult = queue.contains(3);
System.out.println("Contains 3? " + containsResult);
// 8. Clear: 큐 초기화 (비우기)
queue.clear();
System.out.println("Queue Cleared. Is Queue Empty? " + queue.isEmpty());
}
}