컬렉션 프레임워크 - 5. Queue

Ⅴ. Queue

1. Queue(큐)

 - 일자로 된 자료구조로, 선입선출 구조(FIFO : First In First Out)를 지님

 

2. Queue의 특징

 - 먼저 들어간 것이 반드시 먼저 나옴

 - LinkedList 클래스는 Queue를 다중상속함

    ※ LinkedList는 Queue로 참조하면 Queue의 기능을, List로 참조하면 List의 기능을 가짐

 - 인덱스가 없음

 

3. Queue의 기능

 - offer( ) : 데이터를 삽입

 - 선입선출 관련 2 개의 메소드 : peek & poll

    - peek( ) : 당장 꺼낼 수 있는 것을 확인

    - poll( ) : 그 것을 실제로 꺼냄

// Example1
package sample;

import java.util.*;

// Queue
public class Main {
	public static void main(String[] args) {
		// 제네릭 기반
		// Queue로 구현된 자식클래스로 new 해야 함
		// LinkedList는 Queue로 참조하면 Queue의 기능을, List로 참조하면 List의 기능을 가짐
		Queue<String> a = new LinkedList<>();
		
		// Queue에 데이터를 삽일할 때는 offer()
		a.offer("C language");
		a.offer("C++");
		a.offer("python");
		a.offer("Java");
		a.offer("JavaScript");
		
		// 선입선출 관련 두 개의 메소드 : peek, poll
		System.out.println("다음 꺼낼 거 : " + a.peek());	// 다음 꺼낼 거 : C language
		System.out.println("실게 꺼냄 : " + a.poll());		// 실제 꺼냄 : C language
		System.out.println("다음 꺼낼 거 : " + a.peek());	// 다음 꺼낼 거 : C++
		System.out.println("실게 꺼냄 : " + a.poll());		// 실제 꺼냄 : C++
		System.out.println("다음 꺼낼 거 : " + a.peek());	// 다음 꺼낼 거 : python
		System.out.println("실게 꺼냄 : " + a.poll());		// 실제 꺼냄 : python
		System.out.println("다음 꺼낼 거 : " + a.peek());	// 다음 꺼낼 거 : Java
		System.out.println("실게 꺼냄 : " + a.poll());		// 실제 꺼냄 : Java
		System.out.println("다음 꺼낼 거 : " + a.peek());	// 다음 꺼낼 거 : JavaScript
		System.out.println("실게 꺼냄 : " + a.poll());		// 실제 꺼냄 : JavaScript
		
		// 요소가 없을 시, null 반환 : 실수가 점검되지 않음
		System.out.println("다음 꺼낼 거 : " + a.peek());	// 다음 꺼낼 거 : null
		System.out.println("실게 꺼냄 : " + a.poll()); 		// 실제 꺼냄 : null
	}
}

 

 - Queue에는 offer와 동일한 역할을 하는 add가 있음

 - peek → element , poll → remove

    ※ 여기에서 쓰는 메소드들은 사용자가 코드에서 실수를 범할 시, 예외를 발생시킴

package day16;

import java.util.*;

// Queue
public class Queue02 {
	public static void main(String[] args) {
		Queue<String> a = new LinkedList<>();
		
		// Queue에는 offer()와 동일한 역할을 하는 add()가 있음
		a.add("C language");
		a.add("C++");
		a.add("python");
		a.add("Java");
		a.add("JavaScript");
		
		// peek() → element() , poll() → remove()
		System.out.println("다음 꺼낼 거 : " + a.element());	// 다음 꺼낼 거 : C language
		System.out.println("실게 꺼냄 : " + a.remove());		// 실제 꺼냄 : C language
		System.out.println("다음 꺼낼 거 : " + a.element());	// 다음 꺼낼 거 : C++
		System.out.println("실게 꺼냄 : " + a.remove());		// 실제 꺼냄 : C++
		System.out.println("다음 꺼낼 거 : " + a.element());	// 다음 꺼낼 거 : python
		System.out.println("실게 꺼냄 : " + a.remove());		// 실제 꺼냄 : python
		System.out.println("다음 꺼낼 거 : " + a.element());	// 다음 꺼낼 거 : Java
		System.out.println("실게 꺼냄 : " + a.remove());		// 실제 꺼냄 : Java
		System.out.println("다음 꺼낼 거 : " + a.element());	// 다음 꺼낼 거 : JavaScript
		System.out.println("실게 꺼냄 : " + a.remove());		// 실제 꺼냄 : JavaScript
		
		// 예외 발생하므로 예외처리 (예외 발생시, '예외입니다'라고 알림)
		try {
			System.out.println("다음 꺼낼 거 : " + a.element());
			System.out.println("실게 꺼냄 : " + a.remove());			
		} catch(Exception e) {
			System.out.println("예외입니다");		// 예외입니다
		}
	}
}