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 를 넣어줌.
'(JAVA)자바 > (JAVA)자바 문법' 카테고리의 다른 글
(JAVA)자바 객체지향 언어 개념 중요 부분 총정리 part1 (0) | 2021.04.26 |
---|---|
(JAVA) 자바 향상된 for문/자바 for 문/자바 향상된 for문 예제 (0) | 2021.04.05 |
(JAVA)자바 문법 - HashCode 사용법 / StringBuffer 사용법 (간단한 예제) (0) | 2021.03.16 |
(JAVA) 자바 예외/자바 에러/자바 오류 총 정리 (0) | 2021.02.04 |
(JAVA)자바 equals() 의 오버라이딩 쓰는 이유/참조변수에 저장된 값 비교 (0) | 2021.01.29 |
댓글