[자료구조] Queue에 대하여
간단하게 큐(Queue) 는 무엇일까?
우리가 맛집에 줄을서게되면 한 줄로 쭉 서게 되는데 그럼 먼저 줄을 선 사람이 먼저 먹게되겠죠? 아니면
편의점에서 음료를 살 때 음료들이 한 줄로 쭉 이어져있죠?? 이것과 유사한 개념입니다. 1
큐(Queue)의 개념
위에서 설명드린 것처럼 편의점에 음료가 쭉 이어져 있을 때 우리는 가장 앞에 있는 음료를 집게되고 음료가 빠지면 편의점 사장님이 음료를 넣어서 채워놓을 겁니다.
이렇게 먼저 들어간 자료가 먼저 나오는 구조를 FIFO(First in First Out) 이라고합니다.
한국말로는 선입선출이겠죠?
Queue(큐)의 특징
- 선입선출, FIFO구조이다.
- 큐의 제일 앞 쪽은 front이며 삭제 연산만 수행한다.
- 큐의 제일 뒤 쪽은 rear이며 삽입 연산만 수행한다.
- 입력이 많이 밀려올 때 처리하기 힘들면 버퍼를 만들어 대기 시킨다.
Queue(큐)의 사용법
import java.util.LinkedList;
import java.util.Queue;
Queue<Integer> queue = new LinkedList<>();
자바에서 큐를 사용하려면
- LinkedList를 이용해야한다.
- Queue도 이용해야한다.
- 결론 -> 둘 다 import해야 사용할 수 있다.
Queue(큐)에 값 추가하기
.add()
.offer()
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
queue.offer(3);
값을 추가하기위해 사용되는 메소드는 두 가지가 있는데 기능적 차이는 없다. 하지만 문제가 생겼을 때 반환하는 값이 다르다.
문제상황 발생 = 큐가 꽉 차서 값 추가에 실패했을 때
- .add() : 문제상황 발생 시 예외를 던짐 (에러발생)
- offer() : 문제상황 발생 시 false를 리턴함.
Queue(큐)에 값 삭제하기
.poll()
.remove()
Queue<Integer> queue = new LinkedList<>();
queue.offer(1); //추가
queue.offer(2); //추가
queue.offer(3); //추가
queue.poll(); //삭제
queue.remove(); //삭제
값을 삭제하기 위해 사용되는 메소드도 두 가지가 있는데 마찬가지로 기능적 차이는 없지만 반환 값에 차이가 있다.
문제상황 발생 = 삭제를 실패했을 때(큐가 비어있을 때)
- .remove() : 문제상황 발생 시 예외 발생함.
- .poll() : 문제상황 발생 시 null을 반환함.
Queue(큐)에 모든 값 삭제
.clear()
queue.clear();
모든 값을 삭제하기 위해서는 .clear()을 사용해주면 된다.
Queue에서 가장 먼저 들어간 값 알아내기
.element()
.peek()
queue.peek();
queue.element();
peek, element 메소드를 사용하면 첫번째로 저장된 값의 참조 값을 가져옵니다.
- .element() : 문제상황 발생 시 예외 발생시킴
- .peek() : 문제상황 발생 시 null반환
오늘은 Queue(큐)에 대해 알아보았다. 어찌보면 우리에게 익숙한 개념이고 저번에 공부했었던 Stack과 반대의 개념을 가지고 있다고 말할 수 있을 것 같다.
다음엔 Queue를 사용하는 알고리즘인 BFS에 대해 공부해보도록 하겠다!
- 사전적 의미로는 무엇을 기다리는 사람 또는 줄을 서서 기다리는 것 [본문으로]