List로 구현된 queue는 iterable하다. List로 구현되어 있기 때문에 LinkedList를 사용 할 때와 같이 생성해주면 된다.
단 구현된 method를 queue 처럼 사용하면 되는데 아래와 같이 사용하면 된다.
offer는 추가,
peek은 앞의 list를 확인만 하는 용도,
poll은 꺼내어 사용하는 용도,
size는 현재 총 남은 작업을 보여준다.
foreach는 모두 소진되기 전에는 사용 할 수 있다. peek을 사용하며 돌기 때문에 queue를 소진시키진 않는다.
package org.example;
import java.util.LinkedList;
import java.util.Queue;
public class Ex12_Queue {
public static void main(String[] args) {
Queue<String> que = new LinkedList<>();
// LinkedList는 List<E>, Queue<E>를 동시에 구현해놓았다.
que.offer("A"); // Que에 item을 추가
que.offer("B");
que.offer("C");
for(String i : que) { // 모두 꺼내기 전에는 작동 함,
// que를 소비하지 않음,
// peek을 사용하는 것으로 보임
System.out.println("iterable " + i);
}
System.out.println("que의 사이즈를 확인" + que.size());
System.out.println("다음에 무엇이 나올지 확인" +que.peek());
System.out.println(que.poll()); // 첫 번째 객체 꺼내기
System.out.println("que의 사이즈를 확인" + que.size());
// -------------
System.out.println("다음에 무엇이 나올지 확인" +que.peek());
System.out.println(que.poll()); // 두 번째 객체 꺼내기
System.out.println("que의 사이즈를 확인" + que.size());
// -------------
System.out.println("다음에 무엇이 나올지 확인" +que.peek());
System.out.println(que.poll()); // 세 번째 객체 꺼내기
System.out.println("que의 사이즈를 확인" + que.size());
// -------------
System.out.println("다음에 무엇이 나올지 확인" +que.peek()); // null
System.out.println(que.poll()); // 없는 객체 꺼내기 null이 나옴
System.out.println("que의 사이즈를 확인" + que.size()); // 0
for(String i : que) { // 다 꺼내고 나서는 작동 안함
System.out.println("iterable" + i);
}
}
}