Everything has an expiration date
156 - Java 컬렉션 프레임 워크(Collection Framework) : Queue(큐), Queue의 요소 저장 offer() 메소드, Queue의 요소 반환 메소드 peek()과 poll()의 차이 본문
[Java]/Java Concepts
156 - Java 컬렉션 프레임 워크(Collection Framework) : Queue(큐), Queue의 요소 저장 offer() 메소드, Queue의 요소 반환 메소드 peek()과 poll()의 차이
Jelly-fish 2023. 9. 21. 15:06
[Queue] : ① 방향이 항상 한쪽으로...
→ ◎을 꺼내고, ●을 꺼내야만 ○을 꺼낼 수 있다.
② 먼저 집어 넣은 것이 먼저 나온다.
· First Input First Output → [FIFO]
----------
in → ○●◎ → out
----------
○ 큐(Queue) (- 인터페이스 이다.)
큐(Queue)는 선입선출의 FIFO(First Input, First Output) 구조로
먼저 입력된 자료를 먼저 출력하며
Queue 인터페이스를 구현한 클래스는 큐와 관련한 다양한 기능을 제공한다.
※ Queue 인터페이스 인스턴스를 생성하기 위해서는
new 연산자를 이용하여 Queue 인터페이스를 구현한(implements)
클래스의 생성자를 호출한다.
ex) Queue ob = new LinkedList();
-----
○ ← head 요소
-----
(head 요소 : 출구 바로 직전의 요소를 의미)
○ 주요 메소드
- boolean offer(E o)
지정된 요소를 큐에 삽입한다.
- E element()
큐의 head 요소를 반환하며 제거하지 않는다.
- E peek()
큐의 head 요소를 반환하고 삭제하지 않으며
큐 자료구조가 empty 인 경우 null 을 반환한다.
- E poll()
큐의 head 요소를 반환하고 삭제하며
큐 자료구조가 empty 인 경우 null 을 반환한다.
- E remove()
큐의 head 요소를 반환하고 삭제한다.
/* ======================================================
■■■ 컬렉션 프레임워크(Collection Framework) ■■■
=========================================================*/
import java.util.Queue;
import java.util.LinkedList;
public class Test156
{
public static void main(String[] args)
{
// Queue 자료구조 생성
//Queue myQue = new Queue(); //--(Ⅹ)
Queue<Object> myQue = new LinkedList<Object>();
// 데이터 준비
String str1 = "강혜성";
String str2 = "길현욱";
String str3 = "김경태";
String str4 = "김다슬";
// myQue 라는 Queue 자료구조에 데이터 추가
myQue.offer(str1);
myQue.offer(str2);
myQue.offer(str3);
//myQue.offer(str4);
boolean test = myQue.offer(str4);
System.out.println("test : " + test);
//--=-=>> test : true
// 리턴 자료형 boolean - 적재가 제대로 됐다면 true로 보고해 주는 것.
// 배열을 출력했을 때는... 배열의 위치@해시코드가 출력됐지만
// Que를 출력하면 요소가 다 출력된다 ▶ 이것은 진짜가 아니라... 더미(더미 데이터)다!!!!
// 더미에 접근해서 요소를 변경하려는 시도를 해서는 절대 안 된다! 단지 확인용이다!
// 테스트(확인)
//System.out.println(myQue);
//--==>> [강혜성, 길현욱, 김경태, 김다슬] → 더미
// Queue 자료구조 myQue 에서
// 요소를 제거하지 않고 head 요소 반환
System.out.println("값1 : " + (String)myQue.element()); // element : head 요소를 반환하고 제거 x
System.out.println("값2 : " + (String)myQue.element());
System.out.println("값3 : " + (String)myQue.element());
//--==>> 값1 : 강혜성
// 값2 : 강혜성
// 값3 : 강혜성
System.out.println(); // 개행
String val;
// ①
/*
// peek()
//-- 큐의 head 요소 반환. 제거 안함.
// 큐가 empty 일 경우 null 을 반환.
while (myQue.peek() != null) // 요소를 반환시켜서 삭제하지 않는 이유는
{ // 있는지 없는지 조건식에서 『확인』만 하기 위함이다. peek()
// poll()
//-- 큐의 head 요소 반환. 제거함. // 여기서는 실제로 『head 요소를 하나씩 꺼내면서 제거해야』
// 큐가 empty 일 경우 null 을 반환. // 그 다음 값을 출력할 수 있으므로 poll() 메소드를 사용한 것이다.
val = (String)myQue.poll();
System.out.println("요소 : " + val);
}
System.out.println();
//--==>> 요소 : 강혜성
// 요소 : 길현욱
// 요소 : 김경태
// 요소 : 김다슬
*/
// 테스트
/*
// 혜성이를 데려오면서, 동시에 삭제되어 버린다.... → poll() 메소드이므로.
// poll() poll() 끼리만 일하게 하면 현욱이와 다슬이만 출력된다...
while (myQue.poll() != null) // 혜성 삭제, 현욱 출력, 경태 삭제, 다슬 출력
{
val = (String)myQue.poll();
System.out.println("요소 : " + val);
}
System.out.println();
//--==>> 요소 : 길현욱
// 요소 : 김다슬
*/
// ②
/*
while (true)
{
val = (String)myQue.poll();
if (val == null) // null 이면 무한 루프 벗어난다.
break;
else // null 이 아닐 때만 출력.
System.out.println("요소 : " + val);
}
System.out.println();
//--==>> 요소 : 강혜성
// 요소 : 길현욱
// 요소 : 김경태
// 요소 : 김다슬
*/
// ③
while (!myQue.isEmpty())
{
val = (String)myQue.poll();
System.out.println("요소 : " + val);
}
System.out.println();
//--==>> 요소 : 강혜성
// 요소 : 길현욱
// 요소 : 김경태
// 요소 : 김다슬
}
}