Java
[자료구조] Queue 공부하기
무모한 폴라베어
2021. 5. 11. 22:23
처음 자바 강의를 수강했을 때 초반 ~ 중반은 열심히 들었는데 후반에 들어와서는 졸면서 들어서 그런지 후반부의 내용은 기억에 남는 게 별로 없다. 강의 후반부에 들었던 과목 중에 Collection framework도 포함되어있었는데, 자바 강의가 끝나고 Collection framework에 대해서 들었을때 '왜 내가 들은 과정에서는 이걸 안 배웠지?'라고 생각했는데 그건 Collection framework을 놓쳐서 그런 거였다. 아무튼 그래서 오늘은 Queue 와 스택에 대해서 공부하기로 했다.
Queue
First in First Out - FIFO
먼저 들어간 요소가 먼저 나온다.
- Collection framework의 인터페이스 중 하나이다.
- 가장 첫 요소를 front, 가정 끝 요소를 rear이라고 한다.
- rear에 값을 넣는것을 enqueue, front에서 값을 삭제하는 것을 dequeue라고 한다.
- 단어의 뜻에 맞게 줄서서 기다리는 작업들의 처리에 사용한다.
- ex ) 프린트 대기열, 은행업무, 각종 줄 서서 기다리는 작업 등등
Queue 선언하기
Queue<Integer> queue = new LinkedList<>();
Queue 주요 메서드
주요 메서드를 공부하면서 이상했던 점은 큐는 같은 기능을 하는 메서드가 두 개씩 있는 경우가 있었다. 예외처리 부분에서 차이가 있었다.
Overflow(꽉 찬 상태) Underflow(빈 상태) 에서 예외를 throw
- queue.add(element) : element를 큐에 추가한다.
- queue.remove() :front의 데이터를 제거한다.
- queue.element(); front에 있는 데이터를 리턴한다. (데이터 제거 X)
package Array;
import java.util.LinkedList;
import java.util.Queue;
public class QueueTest3 {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
//값을 넣지 않았는데 값을 삭제하면?
queue.remove();
}
}
콘솔에 출력된 결과값
Overflow(꽉 찬 상태) Underflow(빈 상태)에서 null 또는 false를 return
- queue.offer(element) : element를 큐에 추가한다.
- queue.poll() : front의 데이터를 제거한다.
- queue.peek() : front에 있는 데이터를 리턴한다. (데이터 제거 X)
- queue.isEmpty() : 큐가 비어있으면 true, 비어있지 않으면 false 를 리턴한다.
package Array;
import java.util.LinkedList;
import java.util.Queue;
public class QueueTest3 {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.poll();
System.out.println(queue.poll());
}
}
콘솔에 출력된 결과값
마치며
메소드들을 직접 사용하면서 느낀건데 Collection framework의 자료구조들은 동적 할당을 전제로 하기 때문에 데이터의 추가 부분은 상대적으로 확인하기 어려웠다. 이것 외에는 알고리즘을 풀거나 비즈니스 로직을 구현할 때 차이점을 생각하면서 구현할 수 있을거같다.