1. Stack
스택은 밑 부분이 막혀 있는 통 구조로 단방향으로만 데이터를 교환한다.
즉, 마지막에 저장한 데이터를 가장 먼저 빼내는 LIFO(Last In First Out) 방식으로 되어 있다.
예를 들어 스택에 0, 1, 2 순서로 데이터를 저장(push)했다면,
꺼낼 때(pop)는 2, 1, 0 순으로 빼오게 되는 것이다.
스택 구조에서는 순서가 바뀌게 되는 것을 주의해야 한다.
자바에서는 스택을 클래스로 제공하고 있기 때문에 그 자체로도 구현이 가능하다.
class StackTest {
Stack<Integer> stack = new Stack<Integer>();
stack.push(0);
stack.push(1);
stack.push(2);
while(!stack.empty()) {
System.out.println(stack.pop()); // 2, 1, 0
}
for(Integer integer : stack) {
System.out.println(integer); // 0, 1, 2
}
}
2. Queue
큐는 스택과 달리 위 아래 모두 뚫려있는 구조로,
가장 처음 저장한 데이터가 가장 먼저 빠져나가는 FIFO(First In First Out)을 보인다.
예를 들어 큐에 0, 1, 2 데이터를 저장(offer)한다면,
해당 데이터를 빼왔을 때의 순서도 0, 1, 2 순으로 추출(poll)된다는 것이다.
자바에서 큐는 인터페이스로 정의되었기 때문에 큐를 구현한 구상 클래스를 이용해야 한다.
그 중 앞서 정리한 LinkedList 로 구현해보면 다음과 같이 할 수 있다.
class QueueTest {
Queue<Integer> queue = new LinkedList<Integer>();
queue.offer(0);
queue.offer(1);
queue.offer(2);
while(!queue.isEmpty()) {
System.out.println(queue.poll()); // 0, 1, 2
}
}
3. Deque(Double-Ended Queue)
디큐는 큐의 변형 버전으로 양방향에서 데이터를 저장하고 삭제가 가능하다.
메서드 | Deque | Queue | Stack |
끝에 저장 | offerLast() | offer() | push() |
끝에서 삭제 | pollLast() | - | pop() |
앞에 저장 | offerFirst() | - | - |
앞에서 삭제 | pollFirst() | poll() | - |
앞 요소 읽기 | peekFirst() | peek() | - |
끝 요소 읽기 | peekLast() | - | peek() |
'JAVA' 카테고리의 다른 글
바이트 기반 스트림 : InputStream, OutPutStream (0) | 2022.10.02 |
---|---|
Iterator, ListIterator, Enumeration (0) | 2022.09.29 |
Collection Framework : List, Set, Map (0) | 2022.09.28 |
예외 처리 Exception Handling (0) | 2022.09.27 |
내부 클래스와 익명 클래스 (0) | 2022.09.26 |