본문 바로가기
(JAVA)자바/(JAVA)자바 문법

자바 큐 활용 / 자바 Queue 활용 / 자바 큐 사용법 / 큐 사용 예제

by 공부가싫다가도좋아 2021. 4. 4.
반응형

Queue(큐) 사용 법 및 예제


1. 큐 사용법

큐는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out) 구조로 되어 있다.

또한 큐는 데이터의 추가/삭제가 쉬운 LinkedList로 구현하는 것이 적합하다.

 

Queue에 객체를 저장, 꺼내서 반환, 읽어오기는 아래 3개의 메서드로 구현한다.

boolean offer(Object o) - 저장

Object poll() - 꺼내서 반환

Object peek() - 읽어 오기

 

더보기

Queue에 객체를 저장, 꺼내서 반환, 읽어오기 메서드중 

boolean add(Object o) - 추가

Object remove() - 꺼내서 반환

Object element() - 읽어오기

위 세가지 메서드도 있지만, Queue가 비었을때 혹은 저장 공간이 부족할때 예외가 발생 한다.

 

 하지만,

boolean offer(Object o) ,Object poll(), Object peek() 메서드는

Queue가 비어있을때 boolean offer(Object o) 은 false를 반환하고,

나머지 두 메서드는 Queue가 비어있으면 null을 반환한다.

 

* 예외가 발생하지 않는 메서드를 많이 쓰므로 아래 세 메서드만 사용하여 예제를 만들어 보았다. 

 

2. 예제

 

package Ex3;

import java.util.LinkedList;
import java.util.ListIterator;
import java.util.Queue;
import java.util.Scanner;

public class ex5 {
	static Queue q = new LinkedList();
	static final int MAX_SIZE=3;

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		
		
		while(true) {
			String item=s.nextLine().trim();
			if(item.equalsIgnoreCase("q")) {  
            //equalsIgnoreCase 대소문자 구분 없이 
				System.exit(0); //시스템 종료
               
              //명령어 보여주기  
			}else if(item.equalsIgnoreCase("help")) { 
				System.out.printf("help%n
                				+ q or Q - Quit the system"
						+ "%nhistory - 모든 요소 보여줌."
						+ "%np or P - peek"
						+ "%nc or C - clear%n");
                        
                //peek()        
			}else if(item.equalsIgnoreCase("p")) {
				//대소문자 구분 없이 
                //p 를 누를 경우 제일 첫번째 요소 반환. 삭제 안함.
				System.out.println(q.peek());
                
                //LinkedList에 있는 모든 요소를 보여줌.
			}else if(item.equalsIgnoreCase("history")) {
				
				int i=0;
				LinkedList tmp=(LinkedList)q;
				ListIterator it=tmp.listIterator();
				final int SIZE=q.size();
                
				while(it.hasNext()) {
					System.out.println(++i+"."+it.next());
				}
                //리스트 안의 모든 요소 초기화.
			}else if(item.equalsIgnoreCase("c")) {//clear()
            
				q.clear();
			}
			
			else {//offer()
            //입력 시 큐에 저장.
				q.offer(item);
				if(q.size()>MAX_SIZE) {//poll()
                //리스트 사이즈가 3이 넘어갈 경우 poll로 마지막 요소 반환 및 삭제.
					System.out.println(q.poll());
				}
			}
			
			
			
		}

	}

}

 

결과

 

1. aa,bb,cc를 offer()메서드를 사용하여 큐에 저장.

2. peek을 사용하여 맨 처음 요소를 반환.(삭제는 하지 않음.)

 

aa,bb,cc,를 큐에 넣어주고, 리스트 사이즈가 MAX_SIZE=3을 넘었으므로,

맨처음 넣음 요소 aa를 반환 후 삭제, 그리고 dd 를 넣어줌.

반응형

댓글