Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

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();
		//--==>> 요소 : 강혜성
		//       요소 : 길현욱
		//       요소 : 김경태
		//       요소 : 김다슬

		
		 
	}
}