🧐 Queue Interface(큐 인터페이스)란?
Queue Interface는 선형 자료구조로 순서가 있는 데이터를 기반으로 선입선출(FIFO, First In First Out)을 위해 만들어진 인터페이스이다.
큐는 1,2,3,4 순으로 데이터를 넣으면 꺼낼 때 넣은 순서대로 1,2,3,4로 나오는 구조라는 것이다.
가장 앞쪽은 head(헤드)이고, 가장 뒷쪽은 tail(꼬리)라고 부른다.
Queue를 상속하고 있는 Deque(덱)이라는 Interface도 있다.
Queue는 한쪽 방향으로만 삽입과 삭제가 가능하지만 Deque는 Double-ended Queue라는 의미로 양쪽에서 가능하다.
Stack의 성질과 Queue의 성질을 모두 가지고 있는 자료구조이다.
📝 Queue Interface에 정의된 메서드
자세한 내용은 오라클 Java 8 공식문서 - Queue Interface를 들어가면 나온다.
📝 Deque Interface에 정의된 메서드
Queue 메서드를 쓸 수도 있으며, Deque는 양방향이라 헤드와 꼬리를 나눈것이기에 크게 외울것은 없다.
메서드에 대해 알고싶다면 오라클 java 8 공식문서 - Deque Interface 를 참고하자.
📝 Queue와 Deque Interface를 구현하는 클래스
Queue의 상속도를 보고 싶다면 여기를 클릭해서 컬렉션 인터페이스 구조도를 살펴보고 오자.
- LinkedList
- ArrayDeque
- PriorityQueue
여기서 갑자기 LinkedList가 나왔는데 LinkedList는 List(리스트)를 구현하기도 하지만 Deque(덱)도 구현한다.
그리고 Deque Interface는 Queue Interface를 상속받는다.
즉, LinkedList는 List, Deque, Queue로 쓸 수 있다.
ArrayList와 LinkedList의 차이점은 Object[]로 관리하느냐, Node라는 객체를 연결해서 관리하느냐의 차이가 있다.
Deque 또는 Queue를 LinkedList처럼 Node 객체로 연결해서 관리할 수 있다.
원리 자체는 크게 다르지 않기 때문에 다중 인터페이스에 포함되고 있는 것이다.
반대로 ArrayList처럼 Object[]로 구현되어 있는 것은 ArrayDeque이다.
// Queue 구현
Queue<T> queue = new LinkedList<>();
// Deque 구현
Deque<T> queue = new LinkedList<>();
Stack은 ArrayList와 같은 배열기반 컬렉션 클래스가 적합하지만,
Queue는 데이터의 추가/삭제가 자주 발생하므로 LinkedList로 구현하는 것이 적합하다.
그럼 LinkedList와 ArrayDeque는 알겠는데 PriorityQueue는 무엇일까?
해석하면 우선순위 큐라는 의미인데, 데이터 우선순위에 기반하여 우선순위가 높은 데이터가 먼저 나오는 원리이다.
따로 정렬방식을 지정하지 않으면 낮은 숫자가 높은 우선순위를 가지고 있다.
sort()와 같은 순서로 데이터 우선순위를 갖는다는 의미인데, 주어진 데이터에서 최댓값과 최솟값을 꺼낼 때 유용하다.
다만, 사용자가 정의한 객체를 타입으로 쓸 경우 반드시 Comparator 또는 Comparable을 통해 정렬 방식을 구현해야 한다.
참고
https://docs.oracle.com/javase/8/docs/technotes/guides/collections/reference.html
'프로그래밍 > Java' 카테고리의 다른 글
Map 인터페이스 (0) | 2022.02.24 |
---|---|
Set 인터페이스 (0) | 2022.02.24 |
List 인터페이스 (0) | 2022.02.22 |
Java 줄바꿈문자 \n 이란? (0) | 2022.02.17 |
JVM(자바가상머신)이란? - Part 3, ClassLoader (0) | 2022.02.01 |