자바에서 제공하는 Stack과 Queue에 대해 알아보자.
스택과 큐 개념 자세한 설명은 자료구조 - 스택/큐 포스팅 참조
스택과 큐를 구현하기 위해서 어떤 컬렉션 클래스를 사용하는게 좋을까?
간단하게 자바 Stack과 Queue를 사용하는 예제를 살펴보자.
Stack<Integer> st = new Stack<>();
Queue<Integer> q = new LinkedList<>(); // Queue 인터페이스의 구현체인 LinkedList 사용
st.push(1);
st.push(2);
st.push(3);
q.offer(1);
q.offer(2);
q.offer(3);
System.out.println("=====Stack=====");
while (!st.empty())
System.out.println(st.pop());
System.out.println("=====Queue=====");
while (!q.isEmpty())
System.out.println(q.poll());
=====Stack=====
3
2
1
=====Queue=====
1
2
3
Queue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.offer(10);
pq.offer(3);
pq.offer(6);
pq.offer(2);
while (!pq.isEmpty())
System.out.println(pq.poll());
2
3
5
6
10
저장순서는 5, 10, 3, 6, 2 인데 출력 순서는 2, 3, 5, 6, 10 인 것을 확인할 수 있다.
기본 생성자는 최소힙을 사용하므로 최대힙 즉 우선순위가 높은 순서대로 출력하고 싶다면 아래와 같이 사용하면 된다.
Queue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
Deque(덱 또는 디큐)은 양쪽 끝에 추가/삭제 가능
Deque의 조상은 Queue이고, 구현체로는 ArrayDeque, LinkedList 등이 있다.
스택과 큐를 하나로 합쳐놓은 것과 같다.
어느쪽으로든 사용가능
덱 메소드에 대응하는 큐와 스택의 메소드
Deque | Queue | Stack |
---|---|---|
offerLast() | offer() | push() |
pollLast() | - | pop() |
peekFirst() | peek() | - |
peekLast() | - | peek() |
아래는 Deque 사용예제이다.
Deque<Integer> deque = new ArrayDeque<>();
// Queue mode
deque.offerLast(1);
deque.offerLast(2);
deque.offerLast(3);
int one = deque.pollFirst();
int two = deque.pollFirst();
System.out.println(one);
System.out.println(two);
System.out.println(deque);
// Stack mode
deque.offerLast(4);
deque.offerLast(5);
int five = deque.pollLast();
int four = deque.pollLast();
System.out.println(five);
System.out.println(four);
System.out.println(deque);
1
2
[3]
5
4
[3]