JAVA Collection Framework 정리, 자바 컬렉션, List, Set, Map, Queue, Stream 3부 Queue
Link : JAVA Collection Framework 정리, 자바 컬렉션, List, Set, Map, Queue, Stream 1부 List
Link : JAVA Collection Framework 정리, 자바 컬렉션, List, Set, Map, Queue, Stream 2부 Set
Java Collection 정리 3부. Queue에 대해서 알아보도록 하겠습니다.
Queue Collection은 FIFO(First in First Out : 선입선출) 구조로 설계 되었습니다. 프로세스의 우선순위를 설정하기 위해 디자인되었죠.
예외적으로 priority queue 가 있는데 이는 값에 따라 정렬을 합니다. (그냥 있다는 것만..)
간단히 말해 Queue에 먼저 등록된 데이터가 먼저 출력이 됩니다.
다른 Collection 들에 비해 자주 사용이 되지는 않으므로 개념만 잡고 가셔도 됩니다.
우선 Queue에서 사용되는 메서드들을 보도록 하죠.
Collection을 상속받은 Interface이기 때문에 공통적인 메서드도 존재하지만,
Queue에서만 사용되는 메서드가 존재 합니다.
Method Name | Explanation |
add | 큐에 요소 등록, 등록 실패 시 Expection throw |
element | 큐 등록된 첫 번째 요소를 리턴 |
offer | 큐에 요소 등록, 등록 실패 시 false 리턴 |
peek | 큐의 요소를 출력, 없는 경우 null 리턴 |
poll | 큐에 요소를 출력, 출력된 요소는 큐에서 삭제, 큐가 비었으면 null 리턴 |
remove | 큐의 요소를 삭제 |
그럼 예제 코드를 보도록 하겠습니다.
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
queue.add("1. Java");
queue.offer("2. Javascript");
queue.offer("3. C");
queue.add("4. C++");
System.out.println("element : "+queue.element());
for(Iterator<String> itr = queue.iterator(); itr.hasNext();){
System.out.println(itr.next());
}
System.out.println("before Poll : "+queue.size());
while(queue.peek()!=null){
System.out.println("peek : "+queue.peek());
System.out.println("after Peek : "+queue.size());
System.out.println("poll : "+queue.poll());
System.out.println("after Poll : "+queue.size());
}
}
LinkedList로 큐를 생성한 뒤 값을 넣고 확인 한 후
Peek, Poll 하는 예제 입니다.
출력 결과를 보도록 하죠.
[출력 결과]
- line 9
element : 1. Java
- line 12
1. Java
2. Javascript
3. C
4. C++
- line 14
before Poll : 4
- line 17~20
peek : 1. Java
after Peek : 4
poll : 1. Java
after Poll : 3
peek : 2. Javascript
after Peek : 3
poll : 2. Javascript
after Poll : 2
peek : 3. C
after Peek : 2
poll : 3. C
after Poll : 1
peek : 4. C++
after Peek : 1
poll : 4. C++
after Poll : 0
element 메소드가 첫 번째 요소를 출력하는 것과
add와 offer 메소드로 요소가 큐에 등록되는 것을 확인할 수 있습니다.
그 후 큐의 사이즈는 4이죠.
peek, poll 메소드를 호출 하는 곳을 보시면,
peek 후의 queue 개수는 변하지 않습니다. 하지만, poll 메소드를 호출 한 후에는 queue의 사이즈가 변하는 것이 보이죠.
그리고 삽입한 순서에 따라 출력되는 것도 보실 수 있습니다.
그럼 remove 메소드를 보도록 하죠.
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
queue.add("1. Java");
queue.offer("2. Javascript");
queue.offer("3. C");
queue.add("4. C++");
while(queue.peek()!=null){
queue.remove();
System.out.println(queue.peek());
}
System.out.println(queue.size());
}
[출력 결과]
2. Javascript
3. C
4. C++
null
0
가장 먼저 삽입된 queue 부터 삭제 되시는 것을 보실 수 있습니다.
그리고 등록된 queue가 없으면 peek 메소드는 null을 리턴 하는 것도 보실 수 있죠.
이처럼 Queue는 어떠한 로직을 처리하기 전의 요소를 보유하기 위한 용도로 사용 할 수 있습니다.
댓글