본문 바로가기
study/Java

Queue에 대해 알아보자

by 고기만두(개발자) 2021. 8. 28. 15:57
728x90
반응형

이번 시간에는 queue에 대하여 알아보려 합니다.

Queue대기줄이라는 뜻을 가진 영어 단어입니다.

Java Queue 인터페이스는 선입선출(FIFO: First In First Out) 형태로 자료를 보관하고 꺼내는 버퍼입니다.

음식점, 은행 같은 곳에서 줄을 설 때 먼저 온 사람부터 서비스를 받을 수 있는 것처럼, 가장 먼저 저장(push)된 데이터가 가장 먼저 인출(pop)됩니다.

Queue는 주로 linkedlist 형태로 구현되며, queue에서 자주 사용되는 메소드는 다음과 같습니다.

메소드 설명
boolean add(E e) 해당 큐의 맨 뒤에 전달된 요소를 삽입함.
만약 삽입에 성공하면 true를 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생시킴.
E element() 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환함.
boolean offer(E e) 해당 큐의 맨 뒤에 전달된 요소를 삽입함.
E peek() 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환함.
만약 큐가 비어있으면 null을 반환함.
E poll() 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환하고해당 요소를 큐에서 제거함.
만약 큐가 비어있으면 null을 반환함.
E remove() 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 제거함.

예제와 같이 queue을 구현해 보았습니다.

package jaryogujo;
import java.util.*;

public class Queue {

	public static void main(String[] args) {
		LinkedList<String> qu = new LinkedList<String>(); // 큐의 생성

		// offer () 메소드를 이용한 요소의 저장
		qu.offer("넷");
		qu.offer("둘");
		qu.offer("셋");
		qu.offer("하나");

		// peek() 메소드를 이용한 요소의 반환
		System.out.println(qu.peek());
		System.out.println(qu);

peek()을 통해 맨 처음 들어가서 가장 먼저 반환될 요소가 이라는 사실을 알 수 있었습니다.

그리고 qu에 저장된 순서대로 [, , , 하나] 가 출력됩니다.
stack
에서처럼 offer()가 아닌 add()를 사용할 수도 있지만, 두 메서드는 약간의 차이점이 존재합니다.

// poll() 메소드를 이용한 요소의 반환 및 제거
	System.out.println(qu.poll());		
       	System.out.println(qu);

Poll()메서드는 맨 처음 들어가서 가장 먼저 반환되는 요소를 보여주고, 이를 queue 객체에서 빼내 주는 역할을 합니다.

// remove() 메소드를 이용한 요소의 제거
		qu.remove("하나");
		System.out.println(qu);
	}

}

Remove()메서드를 통해 하나를 제거했습니다.

Queuestack과 마찬가지로 인덱스 주소 값은 반환할 수 있지만, 어떤 값이 어디에 들어있는 지 탐색하는 기능은 없습니다.

줄 중간에 누가 서있는지를 궁금해하지는 않는다는 뜻입니다.

따라서 삽입, 삭제 외에 다른 기능이 없습니다.

맨 앞에 무엇이 있는지만 보이고, 누가 있는지는 알 수 없는 줄로 생각할 수 있을 것 같네요.

방향성도 없으니, 삽입과 삭제 모두에서 시간복잡도는 O(1)이겠죠.

이번 시간에는 queue에 대해 알아보았습니다

728x90
반응형

'study > Java' 카테고리의 다른 글

Java 힙 공간 에러 발생한 배치 성능개선후기  (0) 2022.08.22
Java의 Generic  (0) 2021.08.29
Stack(push/pop)  (0) 2021.08.27
Hashmap / Treemap  (0) 2021.08.26
Doubly-linkedlist에 대해 알아보자  (0) 2021.08.25

댓글