코드 그라데이션

Day28-4. 자료구조 (7) Queue 본문

Java/Mega

Day28-4. 자료구조 (7) Queue

완벽한 장면 2023. 4. 24. 21:26

큐(Queue)

: 선입선출(FIFO, First-In-First-Out) 방식으로 요소를 관리하는 자료구조

- 맨 앞에서부터 요소가 하나씩 제거되고, 새로운 요소는 항상 뒤에서 추가됨.

- 키보드 입력에 많이 쓰이곤 합니다.

 

<대표적인 클래스>

자바에서는 Queue 인터페이스를 구현한 여러 클래스가 제공되며,

그 중 대표적인 클래스로는 LinkedListPriorityQueue가 있다.

 

1. LinkedList

: LinkedList는 이중 연결 리스트(doubly linked list)를 구현한 클래스

- LinkedList를 이용해 구현한 큐는 삽입과 삭제가 매우 빠르지만, 검색 속도가 느리다.

 

2. PriorityQueue

: 이진 힙(binary heap)을 기반으로 하는 클래스로, 우선순위 큐(priority queue)를 구현한다.

- PriorityQueue는 요소를 우선순위에 따라 정렬하므로,

  가장 우선순위가 높은 요소를 먼저 꺼내는 것이 가능합니다.

- 검색 속도가 빠르지만, 삽입과 삭제가 느립니다.

 

<주요 메서드>

메서드 설명
boolean add(E e) - 큐의 끝에 요소를 추가합니다.
- 추가에 성공하면 true를 반환하고, 큐가 가득 차있는 경우 예외를 발생시킵니다.
boolean offer(E e): - 큐의 끝에 요소를 추가합니다.
- 추가에 성공하면 true를 반환하고, 큐가 가득 차있는 경우 false를 반환합니다.
E remove() - 큐의 맨 앞에서 요소를 제거하고, 제거된 요소를 반환합니다.
- 큐가 비어있는 경우 예외를 발생시킵니다.
E poll() - 큐의 맨 앞에서 요소를 제거하고, 제거된 요소를 반환합니다.- 
큐가 비어있는 경우 null을 반환합니다.
E element() - 큐의 맨 앞에서 요소를 제거하지 않고, 그 요소를 반환합니다.
- 큐가 비어있는 경우 예외를 발생시킵니다.
E peek() -큐의 맨 앞에서 요소를 제거하지 않고, 그 요소를 반환합니다.
- 큐가 비어있는 경우 null을 반환합니다.

 

위의 메서드 중 add(), offer(), remove(), poll() 메서드는 큐에서 요소를 추가하고 제거할 때 사용되며,

element(), peek() 메서드는 큐에서 요소를 검색할 때 사용됩니다.


 

<큐 예시 모양>

 

 

예제 >
package mega.backend_onemore.Day28;

import java.util.LinkedList;

public class QueueTest {

  public static void main(String[] args) {

    LinkedList<String> q = new LinkedList<String>();
    System.out.println("큐 offer : " + q.offer("한국"));
    System.out.println("큐 offer : " + q.offer("중국"));
    System.out.println("큐 offer : " + q.offer("미국"));
    System.out.println("큐 offer : " + q.offer("러시아"));
    System.out.println("큐 offer : " + q.offer("우크라이나"));
    System.out.println("큐 offer : " + q.offer("북한"));

    System.out.println("===============================");

    // "우크라이나"가 큐(Queue)의 몇 번째 위치에 있는지 찾습니다.
    int index = q.indexOf("우크라이나");
    if(index != -1) {
      System.out.println("큐에서 숫자 \"우크라이나\"의 위치는 : " + index + "번째 입니다.");
    }
    else {
      System.out.println("큐에서 숫자 \"우크라이나\"가 없습니다.");
    }
    System.out.println("===============================");

    // 큐(Queue)에서 값을 순서대로 빼내어 출력합니다.
    while(!q.isEmpty()) { // 비어있지 않다면(차있다면) 반복
      String obj = q.poll(); // 꺼내서
      System.out.println("poll : "+ obj); // 요소 전체출력
    }
  }

}
실행 결과
큐 offer : true
큐 offer : true
큐 offer : true
큐 offer : true
큐 offer : true
큐 offer : true
===============================
큐에서 숫자 "우크라이나"의 위치는 : 4번째 입니다.
===============================
poll : 한국
poll : 중국
poll : 미국
poll : 러시아
poll : 우크라이나
poll : 북한

 

728x90

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

Day30-2. 예외처리(Exception)  (0) 2023.04.24
Day30-1. 문자열 자르기, 날짜 숫자 등 출력  (0) 2023.04.24
Day28-3. 자료구조(6) Map  (0) 2023.04.24
Day28-2. 자료구조(5) Set  (0) 2023.04.24
Day28-29. 파일 입출력  (0) 2023.04.24
Comments