Set은 선형자료구조에 입력하는 시점에 중복하는 규칙이 제공된다.
이제는 값을 꺼낼 때 규칙이 적용되기로 해보자.
규칙: 어디서 값을 꺼낼 것인가?
1. 앞에서부터 꺼내면 Queue
2. 뒤에서부터 꺼내면 Stack
스택은 직접 클래스를 제공하고 있고 Vector를 상속받고 있다.
Stack<Integer> stack = new Stack<>();
제일 늦게 들어간 놈이 제일 먼저 나온다.
큐는 인터페이스로만 제공되고 있다.
Quere를 implement하고 있는 클래스는 굉장히 많은데 그 중 LinkedList도 있다.
Queue<Integer> queue = new LinkedList<>();
add, remove, element 메소드를 사용하면 예외가 발생되고, offer, poll, peek 은 null과 같은 값이 반환된다.
제일 먼저 들어간 놈이 제일 먼저 나온다.
앞뒤로 동시에 꺼내고 싶다면, 즉 Stack과 Queue를 동시에 활용하고 싶을 때 쓰는 자료구조
Deque도 마찬가지로 인터페이스로 제공되고 있다. 예시로는 LinkedList가 구현하고 있다.
Deque<Integer> deque = new LinkedList<>();
앞에 있는 요소를 꺼낼 때에는, offerFirst, pollFirst, peekFirst
뒤에 있는 요소를 꺼낼 때에는 offerLast, pollLast, peekLast 메소드를 사용한다.
Stack 생성, 꺼낼때, 조회 → push, pop, peek
Queue 생성, 꺼낼때, 조회 → offer, poll, peek
Deque 생성, 꺼낼때, 조회 → offer, poll, peek
들어간 순서대로 꺼내오려면 Queue,
들어간 반대로 꺼내오려면 Stack
양방향으로 꺼내오려면 Deque를 쓰자
💡 인덱스를 이용해 중간의 요소를 꺼내오는 경우에는 stack과 queue를 옮바르게 활용하는 방법이 아니다.