정리하고기록하자

큐(Queue) 본문

Data Structure

큐(Queue)

정리하고기록하자 2022. 4. 2. 23:30
반응형

큐(Queue)

큐란 컴퓨터의 기본적인 자료구조의 한가지로, 먼저 집어 넣은 데이터가 먼저 나오는 FIFO ( First In First Out ) 구조로 저장하는 형식이다.

ex ) 줄서기와 같이 처음 선 사람이 처음 통과하는 것처럼, 가장 먼저 넣은 데이터를 가장 먼저 꺼낼수 있는 구조.


큐의 선언

import java.util.LinkedList;
import java.util.Queue;

public class Main {
	public static void main(String[] args){
    	Queue<String> que = new LinkedList<String>();
        
        que.add("Hello");
        que.add("World");
        
        System.out.print(que);
    }
}


주요 메소드

기능 Throws exception Returns special value
삽입(Insert) add(e) offer(e)
삭제(Remove) remove() poll()
헤드 조회(Head Examine) element() peek()

큐의 연산

- 큐는 FIFO 를 따른다.

  • add ( item ), offer( item ) : item을 리스트의 끝부분에 추가한다.
  • remove(), poll() : 리스트의 첫 번째 항목을 제거한다.
  • peek(), element() : 큐에서 가장 위에 있는 항목을 반환한다.

add( item ), offer( item ) 리스트에 추가

  • add(item) : 추가 성공할 경우 true로 반환한다. 하지만 사용 가능한 공간이 없어 추가 실패 시 IllegalStateException 발생한다.
  • offer(item) : 추가 성공할 경우 true로 반환한다. 하지만 사용 가능한 공간이 없어 추가 실패 시 false 로 반환한다.
import java.util.LinkedList;
import java.util.Queue;

public class Main {
	public static void main(String[] args){
    	Queue<String> que = new LinkedList<String>();
        
        que.add("여기는 add"); 
        que.offer("add말고 offer");
        que.add("여기는 add 2번째"); 
        que.offer("add말고 offer 2번째");
        
        System.out.println(que);
    }
}


remove() , poll() 리스트의 첫 번째 항목 삭제

  • remove() : 헤드 요소를 조회하고 제거한다. 하지만 큐가 비어 있다면 예외를 발생시킨다.
  • poll() : 헤드 요소를 조회하고 제거한다. 하지만 큐가 비어 있다면 null 반환
import java.util.LinkedList;
import java.util.Queue;

public class Main {
	public static void main(String[] args){
    	Queue<String> que = new LinkedList<String>();
        
        que.add("여기는 add");
        que.remove(); // 여기서 삭제
        que.offer("add말고 offer");
        que.add("여기는 add 2번째"); 
        que.offer("add말고 offer 2번째");
        que.poll(); // 끝에서 삭제
        
        System.out.println(que);
    }
}

* 최초 add 뒤에서 remove 로 삭제 후에 맨 마지막에서 poll로 삭제 해도 콘솔로 보면 첫번째, 두번째 항목이 삭제된 것을 확인 할 수 있다.


peek(), element() 큐에서 가장 위에 있는 항목을 반환한다.

 

  • element() : 헤드 요소를 조회하고 반환한다. 하지만 큐가 비어 있다면 예외 발생한다.
  • peek() : 헤드 요소를 조회하고 반환한다. 하지만 큐가 비어 있다면 null 반환한다.

 

import java.util.LinkedList;
import java.util.Queue;

public class Main {
	public static void main(String[] args){
    	Queue<String> que = new LinkedList<String>();
        
        que.add("여기는 add");
//        que.remove(); // 여기서 삭제
        que.offer("add말고 offer");
        que.add("여기는 add 2번째"); 
        que.offer("add말고 offer 2번째");
        que.poll(); // 끝에서 삭제
        System.out.println(que.element());
        System.out.println(que.peek());
        System.out.println(que);
    }
}

que.element() , que.peek() 을 찍어봤을때 제일 상단에 위치하고 있는 항목을 가져 올 수 있다


큐의 사용 사례

  • 우선순위가 같은 작업 ( ex : 인쇄 대기열 )
  • 선입선출이 필요한 대기열 ( 티켓 카운터, 주식 )
  • 콜센터 고객 대기시간
  • 프린터의 출력 처리

 

 

Java Platform SE 8

 

docs.oracle.com

 

 

[JAVA] Queue 직접 구현하기

Queue 란  Stack과는 다르게 데이터가 들어간 순서대로 나오는 즉, FIFO(First In Last Out) 선입선출의 자료구조이다. First In First Out 선입 선출 먼저 들어간 것이 먼저 나온다.  데이터를 추출할 때 Stack..

jinyoungchoi95.tistory.com

 

반응형

'Data Structure' 카테고리의 다른 글

HashTable VS HashMap  (0) 2022.05.22
HashMap  (0) 2022.05.21
해쉬 테이블 ( HashTable )  (1) 2022.04.16
트리 (Tree)  (0) 2022.04.07
힙(Heap)  (0) 2022.03.26