Stack 클래스
는 List 컬렉션 클래스의 Vector 클래스를 상속받아,
전형적인 스택 메모리 구조의 클래스를 제공한다.
스택 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 후입선출(LIFO) 자료 구조다.
Stack 클래스
는 스택 메모리 구조를 표현하기 위해, Vector 클래스의 메서드를 5개만 상속받아 사용한다.
메서드 | 설명 |
---|---|
boolean empty() | 해당 스택이 비어 있으면 true를, 비어 있지 않으면 false를 반환 |
E peek() | 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환 |
E pop() | 해당 스택의 제일 상단에 있는(제일 마지막으로 저장된) 요소를 반환하고, 해당 요소를 스택에서 제거 |
E push(E item) | 해당 스택의 제일 상단에 전달된 요소를 삽입 |
int search(Object o) | 해당 스택에서 전달된 객체가 존재하는 위치의 인덱스를 반환 이때 인덱스는 제일 상단에 있는(제일 마지막으로 저장된) 요소의 위치부터 0이 아닌 1부터 시작 |
더욱 복잡하고 빠른 스택을 구현하고 싶다면 Deque 인터페이스를 구현한 ArrayDeque 클래스
사용
Deque<Integer> st = new ArrayDeque<Integer>();
Stack<Integer> st = new Stack<Integer>(); // 스택의 생성
st.push(4);
st.push(2);
st.push(3);
st.push(1);
System.out.println(st.peek());
System.out.println(st);
System.out.println(st.pop());
System.out.println(st);
System.out.println(st.search(3));
// 실행 결과
// 1
// [4, 2, 3]
// 1
클래스로 구현된 스택과는 달리 자바에서 큐 메모리 구조는 별도의 인터페이스 형태로 제공
Queue 인터페이스
를 상속받는 하위 인터페이스는 다음과 같다.
Deque<_E_>
BlockingDeque<_E_>
BlockingQueue<_E_>
TransferQueue<_E_>
따라서 Queue 인터페이스를 직간접적으로 구현한 클래스는 상당히 많다.
그중에서도 Deque 인터페이스를 구현한 LinkedList 클래스가 큐 메모리 구조를 구현하는 데 가장 많이 사용된다.
큐 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 선입선출(FIFO) 자료 구조다.
Queue 인터페이스는 큐 메모리 구조를 표현하기 위해,
다음과 같은 Collection 인터페이스 메서드만을 상속받아 사용한다.
메서드 | 설명 |
---|---|
boolean add(E e) | 해당 큐의 맨 뒤에 전달된 요소 삽입 만약 삽입에 성공하면 true를 반환하고, 큐에 여유 공간이 없어 삽입에 실패하면 IllegalStateException을 발생 |
E element() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환 |
boolean offer(E e) | 해당 큐의 맨 뒤에 전달된 요소를 삽입 |
E peek() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환 만약 큐가 비어있으면 null을 반환 |
E poll() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 반환하고, 해당 요소를 큐에서 제거 만약 큐가 비어있으면 null을 반환 |
E remove() | 해당 큐의 맨 앞에 있는(제일 먼저 저장된) 요소를 제거 |
더욱 복잡하고 빠른 큐를 구현하고 싶다면 Deque 인터페이스를 구현한 ArrayDeque 클래스를 사용하면 된다.
Deque<Integer> qu = new ArrayDeque<Integer>();
LinkedList<String> qu = new LinkedList<String>();
qu.add("넷");
qu.add("둘");
qu.add("셋");
qu.add("하나");
System.out.println(qu.peek());
System.out.println(qu);
System.out.println(qu.poll());
System.out.println(qu);
qu.remove("하나");
System.out.println(qu);
// 실행 결과
// 넷
// [넷, 둘, 셋, 하나]
// 넷
// [둘, 셋, 하나]
// [둘, 셋]
✅ Java SE 6부터 지원되는 ArrayDeque
클래스는 스택과 큐 메모리 구조를 모두 구현하는데 가장 적합한 클래스다.