Queue의 종류
Queue는 공통적으로 Front
, Rear
두 개의 pointer를 갖는다.
Queue는 Array
나 Linked List
를 사용하여 구현한다.
- Simple or linear Queue
- 일반적으로
Linked-list
로 구현된다.FIFO(First In First Out)
의 기본을 기킨다.
- 일반적으로
- Circular Queue
- 말 그대로
head
와rear
가 이어져있는 구조.
- 말 그대로
- Priority Queue
- 각 개체(node, item, etc.)가
Priority
를 가지고 있어서 First in은 성립하지만Priority
가 높은 녀석이 먼저 나오게 된다.
- 각 개체(node, item, etc.)가
- Dequeue
Double-Ended Queue
를 의미하며 front (head) 쪽과 back (tail) 쪽 모두에서 추가/삭제될 수 있는 구조를 말한다.Head-tail linked list
라고도 불리운다.
java.util.Queue
Java에서는 기본적으로 Queue를 지원한다. (실제로 이걸 사용한 코드는 적어도 회사에서는 본 적 없다.)
이 Queue는 Java Collections Framework에 속한 interface로 세부 내용들은 구현 해주어야 한다.
Java Collections Framework에 속한 interface들은 다음과 같은 것들이 있다.
- java.util.Collection에 속한 것들
- java.util.Set
- java.util.SortedSet
- java.util.NavigableSet
- java.util.Queue
- java.util.concurrent.BlockingQueue
- java.util.concurrent.TransferQueue
- java.util.Degue
- java.util.concurrent.BlockingDegue
- java.util.Map에 속한 것들
- java.util.SortedMap
- java.util.NavigableMap
- java.util.concurrent.ConcurrentMap
- java.util.concurrent.ConcurrentNavigableMap
이걸 바로 사용하기 위해서는 아래와 같은 방식으로 사용 용도에 맞게 초기화 해주어야 한다.
|
|
해보자
기본적인 add
(혹은 push)와 poll
(혹은 pop)을 Linked List로 구현해보자.
Node
사용할 Node를 만든다.
|
|
Queue
Node를 이용한 Queue를 생성한다.
|
|
Use
그리고 사용하자. 아래 예시에서는 3개를 넣고 4개를 빼기 때문에 NullPointerException
이 발생한다.
|
|
출처
아래의 글들을 교재삼아 작성하였습니다.