자바 큐 활용 / 자바 Queue 활용 / 자바 큐 사용법 / 큐 사용 예제
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 를 넣어줌.