[JAVA]21일차(컬렉션 프레임워크(Collection Framework)/큐(Queue))

정효진·2021년 8월 11일
0

Developer Study

목록 보기
37/47
post-thumbnail

8월12일(목)

Test152~Test159

◼ 큐(Queue)

적용 예)
이메일 전달
푸쉬 알림 기능
쇼핑몰에서 주문을 처리하는 방식(선착순)
콜센터의 백엔드-전화 온 순서대로 상담을 처리 등

▪ 큐(Queue) 개요

큐(Queue)는 FIFO(First Input First Output, 선입선출) 구조로
먼저 입력된 자료를 먼저 출력하며, Queue 인터페이스를 구현한 클래스는 큐와 관련된 다양한 기능을 제공한다.

※ Queue 인터페이스 인스턴스를 생성하기 위해서는 new 연산자를 이용하여 Queue 인터페이스를 구현한(implements) 클래스의 생성자를 호출한다.

ex) Queue ob = new LinkedList();

++ Queue는 인터페이스 Stack은 클래스!

▪ 큐(Queue) 코드 설명1📝

import java.util.Queue;
import java.util.LinkedList;

public class Test152
{
	public static void main(String[] args)
	{
		// Queue 자료 구조 생성
		//Queue myQue = new Queue();  //-- (X)큐는 인터페이스라서 이렇게 생성할 수 없다!
		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);
		boolean test = myQue.offer(str4);

		System.out.println(myQue);
		//--==>> [선풍기, 에어컨, 부채, 그늘] 
		//데이터의 컨트롤은 이런 더미로 하면 안된다!
		//더미는 딸기 바나나 포도라고 적혀있는 쪽지 이걸로 직접적인 데이터 컨트롤 할 수 없다.

		System.out.println(test);
		//--==>> true

		// Queue 자료구조에서 요소를 제거하지 않고 head 요소 반환
		System.out.println("값1 : " +(String) myQue.element());
		//							          -----
									         //	큐(데이터타입)
									        //--------------- 
									        //    오브젝트(데이터타입)
		System.out.println("값2 : " +(String) myQue.element());
		//--==>>값1 : 선풍기
		//		값2 : 선풍기

		System.out.println();

		String val;

		// 방법 ①
		// peek()
		//-- 큐의 head 요소 반환. 제거 안함.
		//   큐가 empty 일 경우 null 반환.
		/*
		while (myQue.peek() != null)           //-- 지영을 확인하고 제거하지 않음.
		{
			//poll()
			//-- 큐의 head 요소 반환. 제거함.
			// 큐가  empty 일 경우 null 반환
			val = (String)myQue.poll();        //-- 지영을 확인하고 출력하면서 제거함.
			System.out.println("요소 : " + val);     
		}
		System.out.println();

		//--==>> 요소 : 선풍기
		//		 요소 : 에어컨
		//		 요소 : 부채
		//		 요소 : 그늘
		// 픽폴하는건데 지금은 폴폴하면 두개당 하나씩나와서 에어컨나오고 그늘 나옴


		//String[] arr = {"홍길동", "이순신", "강감찬"};
		//				----------------------------
		//						문자열(데이터타입)
		*/


		//테스트
		/*
		while (myQue.poll() != null)
		{
			val = (String)myQue.poll();
			System.out.println("요소 : " + val);  
		}
		System.out.println();
		*/
		//--==>> 요소 : 에어컨
		//		 요소 : 그늘

		// 방법 ②
		/*
		while (true)  //무한루프
		{
			val = (String)myQue.poll();
			if (val==null)
				break;
			else
			 System.out.println("요소 : " + val);
		}
		System.out.println();
		*/
		//--==>>요소 : 선풍기
		//		요소 : 에어컨
		//		요소 : 부채
		//		요소 : 그늘

		// 방법 ③
		while (!myQue.isEmpty())
		{
			val = (String)myQue.poll();
			System.out.println("요소 : " +val);
		}
		System.out.println();
		//--==>>요소 : 선풍기
		//		요소 : 에어컨
		//		요소 : 부채
		//		요소 : 그늘

	}
}

▪ 큐(Queue) 코드 설명2📝

import java.util.Queue;
import java.util.LinkedList;

public class Test153
{
	// 정적 문자열 배열 선언 및 초기화
	private static final String[] colors = {"검정", "노랑", "초록", "파랑", "빨강", "연두"};
	
	
	public static void main(String[] args)
	{
		// Queue 자료구조 생성
		Queue<String> qu = new LinkedList<String>();
		//-- Queue 인터페이스 기반의 인스턴스를 생성하기 위해서는
		//   new 연산자를 이용하여 Queue 인터페이스를 implements 한
		//   하위 클래스의 생성자를 호출해야 한다.

		// qu 라는 Queue 자료구조에
		// color 배열의 데이터 입력 -> offer()
		for (String color : colors)
			qu.offer(color);      //--지정된 요소를 큐에 삽입한다.

		// qu 라는 Queue 자료구조의 모든 데이터 전체 출력
		while (qu.peek() != null)
			System.out.print(qu.poll() + " ");
		System.out.println();
		//-- peek()
		//		: 큐의 head 요소를 반환하고 삭제하지 않으며
		//		  큐 자료구조가 비어있는 상태가 되면 null 반환
		//-- poll()
		//		: 큐의 head요소를 반환하고 삭제하며
		//		  큐 자료구조가 비어있는 상태가 되면 null 반환

		//--==>> 검정 노랑 초록 파랑 빨강 연두
	}
}
profile
개발새발

0개의 댓글