본문 바로가기

JAVA/DAY 19 _ 23.09.12

Queue

## 큐(Queue):
// - 데이터를 선입선출(FIFO, First-In-First-Out) 방식으로 저장하고 관리
// - 주로 데이터의 순서를 보존하고 처리할 때 사용되며, 다양한 응용 분야에서 유용하게 활용됨
// - 아메 주문을 받은데, 얼음을 주르륵 만들고... 이런게 아니라, "하나만들고 결제하고.. 하나만들고 결제하고..."
//

# 특징:
//
// 1. 선입선출 (FIFO): 가장 먼저 추가된 요소가 가장 먼저 제거됩니다. 
// 이러한 특성은 대기열(Queue)에서 요소를 처리하는 데 매우 유용합니다.
//
// 2. 요소 추가 및 제거: 주로 enqueue (요소 추가=add)와 dequeue (요소 제거=poll) 연산을 통해 데이터를 관리합니다.
//
// 3. 한쪽 끝에서 추가, 다른 한쪽 끝에서 제거: 요소는 보통 큐의 한쪽 끝에서 추가되고, 반대쪽 끝에서 제거됩니다.
//
// 4. 다양한 응용: 큐는 작업 대기열, 프로세스 스케줄링, 이벤트 처리, 데이터 버퍼링, 그래프 탐색 (너비 우선 탐색, BFS) 등의 다양한 응용 분야에서 사용됩니다.

 

// ====================================================

// 아쉽게도 개인 클래스가 없어서 이런식으로.....구현...


// LinkedList 클래스는 큐(Queue)를 상속받은 것이 아니라,
// 큐 인터페이스(java.util.Queue)를 구현한 클래스 중 하나임!!!!

 

Queue<String> queue = new LinkedList<>();

    // 요소 추가
    queue.add("첫 번째 요소");
    queue.add("두 번째 요소");
    queue.add("세 번째 요소");

    // 요소 제거 및 출력
    while (!queue.isEmpty()) {
        String element = queue.poll();
        System.out.println("제거된 요소: " + element);
    }

    // ---> add로 요소를 추가하고 poll로 요소를 제거하며 선입선출(FIFO) 방식을 따름!

 

## 예시

// LinkedList<String> queueList = new LinkedList<>();
// --> 문법적으로는 맞으나....
// --> 이렇게 생성된 linkedList 객체는 큐 역할을 하지 않고, 연결 리스트로 사용됨


Queue<String> queueList = new LinkedList<>();

queueList.offer("안녕1");
queueList.offer("안녕2");
queueList.offer("안녕3");
queueList.offer("안녕4");
queueList.offer("안녕5");


String poll = queueList.poll();		// 아메 주문을해 나는 한번에 하나밖에 못해(결제까지 다한다구)
System.out.println(poll);			// 출력 : 안녕1 (= 삭제될 요소)


System.out.println("==== poll이 맨앞에 주문을 받아서 안녕1 손님이 집갔다구 ==== ");

for(String removePoll : queueList) {	// 출력 : 안녕2~5
    System.out.println(removePoll);
}

'JAVA > DAY 19 _ 23.09.12' 카테고리의 다른 글

자료구조 summary, 시간복잡도  (0) 2023.09.12
HashMap2  (0) 2023.09.12
HashMap  (4) 2023.09.12
Set  (0) 2023.09.12
(collection framework의) Stack  (0) 2023.09.12