알고리즘

[자료구조] Queue

keepgoing 2023. 4. 12. 21:21

자바(Java)에서 Queue는 데이터를 순서대로 관리하기 위한 자료구조 중 하나이다. 
이 자료구조는 선입선출(FIFO, First-In-First-Out)의 원칙을 따르며, 데이터가 들어온 순서대로 처리된다.

 

Java에서 Queue는 java.util 패키지에 속해 있으며, 다양한 구현체를 제공한다.

대표적인 Queue 구현체로는 LinkedList, ArrayDeque, PriorityQueue 등이 있다.

 

LinkedList는 연결 리스트를 기반으로 한 Queue 구현체이다. 요소를 추가하거나 삭제할 때마다 리스트의 노드를 생성하거나 제거하기 때문에 처리 속도가 느리지만, 요소를 삽입하거나 삭제하는 작업에는 빠르게 대응할 수 있다.

 

ArrayDeque는 배열을 기반으로 한 Queue 구현체이다. Queue의 크기를 동적으로 조정할 수 있으며, 요소를 추가하거나 삭제할 때 배열의 원소를 이동시키는 방식으로 처리하기 때문에 LinkedList에 비해 처리 속도가 빠르다.

PriorityQueue는 우선순위를 고려하여 데이터를 저장하는 Queue 구현체이다. 요소를 추가할 때 우선순위에 따라 정렬되며, 우선순위가 가장 높은 요소가 먼저 처리된다.

Queue 인터페이스는 offer(), poll(), peek() 메서드를 제공한다.

offer() 메서드는 Queue의 맨 뒤에 요소를 추가한다.

poll() 메서드는 Queue의 맨 앞에서 요소를 제거하고 반환한다.

peek() 메서드는 Queue의 맨 앞 요소를 반환한다.

예를 들어, 다음과 같이 Queue를 생성하고 요소를 추가하고 삭제할 수 있다.

 

Queue<String> queue = new LinkedList<>();

queue.offer("apple");
queue.offer("banana");
queue.offer("cherry");

String first = queue.poll(); // "apple" 반환
String second = queue.peek(); // "banana" 반환

위의 코드에서는 LinkedList를 사용하여 Queue를 생성하였고, offer() 메서드를 사용하여 "apple", "banana", "cherry" 요소를 순서대로 추가하였다.

그리고 poll() 메서드를 사용하여 맨 앞 요소를 삭제하고 반환하였고,

peek() 메서드를 사용하여 맨 앞 요소를 반환하였다.