[Java] 스택(Stack), 큐(Queue)
스택(Stack)
Stack의 사전적 정의는 '쌓다', '더미'라는 뜻으로, 택배 상하차를 할 때를 떠올리면 된다.
상자를 올릴 때는 위로 쌓아올리고, 물건을 내릴 때는 가장 위의 상자부터 내리는 구조와 같다.
즉 Stack은 LIFO(Last In First Out)의 구조로, 마지막에 들어간 값이 가장 먼저 출력되는 구조를 띄고 있다.
Stack의 사용
- 값을 입력할 때는 push() 사용
- 값을 출력할 때는 pop() 사용
- 값을 출력하지 않고 가장 마지막의 값을 확인하고 싶을 때는 peek() 함수 이용
출력 결과
-> 가장 마지막에 입력된 값이 가장 먼저 출력되는 역순의 구조를 띄고 있다.
큐(Queue)
Queue의 사전적 의미는 줄을 서서 기다리는 것을 의미하는데 매장에서 물건을 구입하기 위해 줄을 길게 기다리는 상황을 떠올리면 된다.
즉 Queue는 FIFO(First In First Out)의 구조로, 먼저 들어간 값이 가장 먼저 출력되는 구조이다.
큐를 사용할 때는 클래스가 아닌 인터페이스만 제공하므로 이 Queue 인터페이스를 구현한 클래스를 사용해야 한다.
1. LinkedList
- 값을 입력할 때는 add(), offer()을 사용
- 값을 출력할 때는 poll(), remove()를 이용
- 값을 출력하지 않고 가장 마지막의 값을 확인하고 싶을 때는 peek() 함수 이용
출력 결과
-> 가장 먼저 입력한 값이 가장 먼저 출력되는 순차적인 구조를 띄고 있다.
2. PriorityQueue
- 우선순위 큐는 저장된 순서에 관계없이 우선순위가 높은 것부터 꺼내는 특징이 있다. (오름차순)
출력 결과
-> 숫자가 작을수록 우선순위는 높아지기 때문에 가장 우선순위가 높은 1이 먼저 출력되었다.
만약 내림차순으로 출력하고 싶다면 아래의 식을 이용하면 된다.
Queue<Integer> queue=new PriorityQueue<>(Collections.reverseOrder());