Queue
>의미
: 대기 행렬. 즉, 데이터가 들어가서 저장되었다가 들어간 순으로 뽑아냄.
: Stack과 반대되는 개념의 자료구조
: 예시) 고속도로 톨게이트(자동차: 데이터)
>사용
enqueue: Queue에 데이터를 넣는 것. (add)
dequeue: Queue에서 데이터를 꺼내는 것. (poll)
>특징
- 1. FIFO(First In First Out)
: 먼저 들어간 데이터가 제일 처음에 나옴. (선입선출)
- 2. 데이터는 하나씩 넣고(add) 뺼(poll) 수 있다.
: 한꺼번에 여러개의 데이터를 넣고 뺼 수 없음.
- 3. 두 개의 입출력 방향이 있다.
: 입력, 출력 방향이 다르다.
: Stack과 다르게 넣은 곳에서 뺄 필요가 없으니.
>실사용 예제
: 게임 큐(Queue) 잡기
: 프린터 인쇄 (문서의 페이지별로 인쇄됨)
>buffer의 개념
: 컴퓨터의 여러 장치에서 발생한 불규칙적인 이벤트를 규칙적으로 처리하기 위해 사용하는 것.
: Queue과 같은 구조로 이벤트를 쌓고, 가장 먼저 들어온 이벤트부터 CPU가 규칙적으로 처리함. 이런 과정을 Buffering이
라고 한다.
>Queue를 사용하기 적합한 상황
- 1. 데이터 처리 속도가 다른 장치간 사용
: 빠른 처리 속도의 CPU가 인쇄 작업을 미리 Queue에 저장하고 딴 일함.
: 느린 처리 속도의 프린터는 Queue에서 데이터를 받아서 일함.
- 2. 스트리밍 서비스
: 끊김없이 연속적으로 데이터가 제공되어야함.
: Queue에 데이터를 모으고, 충분히 모인 경우 스트리밍함으로써 끊김없는 서비스를 제공
>메서드
add(): 큐에 데이터를 추가 (같은 역할을 하는 offer()도 존재)
poll(): 가장 먼저 추가된 데이터를 큐에서 삭제하고 삭제한 데이터를 리턴
remove(): 가장 먼저 추가된 데이터를 큐에서 삭제
size(): 큐에 추가된 데이터의 크기를 리턴
peek(): 큐에 가장 먼저 추가된 데이터를 리턴(큐가 비어있으면 null 반환, element()도 같은 비슷한 역할)
show(): 큐에 들어있는 모든 데이터를 String 타입으로 변환하여 리턴
clear(): 큐에 들어있는 모든 데이터를 삭제(Collection 인터페이스의 메서드)
>ArrayList로 Queue 구현해보기
: 0번 인덱스에서 계속 데이터가 삭제되어서 list를 한 칸씩 당기는 작업이 발생. 효율이 안좋을듯..?
: 따로 정리
>공식 문서 뜯어보기
public interface Queue<E> extends Collection<E> {...}
: Collection을 상속받는 '인터페이스'이다. (Stcak은 클래스였는데)
: 따라서, 구현해야 사용할 수 있을 것이다.
: 그래서 보통 Queue를 사용할 때, LinkedLIst, 혹은 우선 순위 큐라는 것을 쓰나보다.
: 메서드들도 LinkedList에서 구현된 것으로 사용.
>Queue의 하위 인터페이스
1. Deque<E>
2. BlockingDeque<E>
3. BlockingQueue<E>
4. TransferQueue<E>
// 자료구조 추가 공부하면서 상속, 구현 관계에 있는게 뭐가 있고, 따라서 어떤 메서드를 더 쓸 수 있는지도 볼 것.
'코드스테이츠_국비교육 > [Section2]' 카테고리의 다른 글
24.02_Graph_22.09.23 (1) | 2022.09.25 |
---|---|
24.01_Tree_22.09.23 (0) | 2022.09.25 |
23.02_Stack_22.09.22 (1) | 2022.09.23 |
23.01_자료구조_22.09.22 (0) | 2022.09.23 |
22_JSON 및 재귀 문제 풀이_22.09.21 (0) | 2022.09.21 |