Queue deque = new ArrayDeque<>();
추가 : O(1)
deque.offer(obj););
deque.offerFirst(obj);
deque.offerLast(obj);
삭제 : O(1)
deque.poll(obj););
deque.pollFirst(obj);
deque.pollLast(obj);
조회 : O(1)
deque.peek(obj););
deque.peekFirst(obj);
deque.peekLast(obj);
Q. 원형으로 이루어져 있는데 어떻게 앞, 뒤가 존재하는지?
A. 원형 '배열'로 저장하기 때문에 큐와 스택을 모두 지원할 수 있다. 원형은 끝과 끝이 연결되어 있지만, 내부에서는 논리적으로 앞과 뒤를 추적하고 명확하게 제어할 수 있다.
Q. Queue<Integer> q = new ArrayDeque<>();
로 선언했을 때와 Deque<Integer> q = new ArrayDeque<>();
로 선언했을 때, 사용할 수 있는 메소드가 다른 이유
A. Queue Interface로 선언한 것과 Deque Interface로 선언한 것의 차이.
Queue로 선언하면 Queue 자료 구조 기본 동작을 지원하고, Deque로 선언하면, Queue와 Deque의 모든 메소드를 사용할 수 있기 때문에, offer, poll, peek 외에도 addFirst, addLast, removeFirst, removeLast, getFirst, getLast 등을 사용할 수 있음
Q. Deque
의 앞쪽(헤드) 요소를 반환하는 q.element()
와 q.getFirst()
의 차이점
A.
...?
element()의 경우 queue가 비어 있을 경우, NoSuchElementException
을 반환하지만, getFirst()의 경우 Exception을 반환하지 않고 null을 반환함
q.getFirst() 외에도 q.peek()
, q.poll()
등 모두 null을 반환함
Queue pq = new PriorityQueue<>();
Heap
을 기반으로 구현되며, 우선 순위 큐, 최소 힙 등으로 불림추가 : O(log n)
deque.offer(obj););
삭제 : O(log n)
deque.poll(obj););
deque.pollFirst(obj);
deque.pollLast(obj);
조회 : O(1)
deque.peek(obj););
deque.peekFirst(obj);
deque.peekLast(obj);
Reference
Oracle Java 17 ArrayDeque
Oracle Java 17 PriorityQueue
Chat GPT