Stack<E> (스택) 클래스
Stack 클래스는 List 컬렉션 클래스의 Vector 클래스를 상속받아, 전형적인 스택 메모리 구조의 클래스를 제공
스택 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 후입선출 (LIFO - Last In First Out)의 시멘틱을 따르는 자료 구조
즉, 가장 나중에 저장된(push) 데이터가 가장 먼저 인출(pop)되는 구조
스택은 단순히 stack만 import 해주어도 사용 가능
스택에 원소를 삽입하는 함수로는 push()가 있고, peek()을 통해 다음에 빼낼 원소를 조회할 수 있고, pop()을 통해 원소를 빼낼 수 있음
import java.util.Stack;
Stack<Integer> stack = new Stack<>(); // 스택 객체 생성
stack.push(1); // push: 스택에 1 삽입
stack.push(9); // push: 스택에 9 삽입
stack.push(13); // push: 스택에 13 삽입
System.out.println("Stack : " + stack);
// Stack : [1, 9, 13]
int peek = stack.peek(); // peek : 다음에 빼낼(맨 뒤) 원소 조회;
System.out.println("peek : " + peek);
// peek : 13
System.out.println("Stack : " + stack);
// Stack : [1, 9, 13]
int pop = stack.pop(); // pop : 맨 뒤의 원소 빼냄;
System.out.println("pop : " + pop);
// pop : 13
System.out.println("Stack : " + stack);
Stack : [1. 9]
pop = stack.pop(); // pop : 맨 뒤의 원소 빼냄
System.out.println("pop : " + pop);
// pop : 9
System.out.println("Stack : " + stack)
// Stack : [1]
Queue<E> (큐) 인터페이스
클래스로 구현된 스택과는 달리 자바에서 큐 메모리 구조는 별도의 인터페이스 형태로 제공
이러한 Queue 인터페이스를 상속받는 하위 인터페이스는 아래와 같다.
1. Deque<E>
2. BlockingDeque<E>
3. BlockingQueue<E>
4. TransferQueue<E>
따라서 Queue 인터페이스를 직간접적으로 구현한 클래스는 상당히 많음
그 중에서도 Deque 인터페이스를 구현한 LinkedList 클래스가 큐 메모리 구조를 구현하는데 가장 많이 사용
큐 메모리 구조는 선형 메모리 공간에 데이터를 저장하면서 선입선출 (FIFO - First In First Out) 시멘틱을 따르는 자료구조
즉, 가장 먼저 저장된 (push) 데이터가 가장 먼저 인출(pop) 되는 구조
큐는 LinkedList를 이용하여 구현되어있기 때문에 Queue와 LinkedList 모두 import를 해주어야 사용 가능
큐에 원소를 삽입하는 함수는 offer()와 add()가 있고, peek()을 통해 다음에 빼낼 원소를 조회할 수 있으며, pull()과 remove()를 통해 원소를 빼낼 수 있음
import java.util.LinkedList;
import java.util.Queue;
Queue<Integer> queue = new LinkedList<>(); // 큐 객체 생성
queue.offer(10); // offer : 큐에 10 삽입
queue.offer(5); // offer : 큐에 5 삽입
System.out.println("Queue : " + queue);
// Queue : [10, 5]
queue.add(25); // add : 큐에 25 삽입
queue.add(99); // add : 큐에 99 삽입
System.out.println("Queue : " + queue);
// Queue : [10, 5, 25, 99]
int peek = queue.peek(); // peek : 다음에 빼낼 (맨 앞) 원소 조회
System.out.println("peek : " + peek);
// peek : 10
System.out.println("Queue : " + queue);
// Queue : [10, 5, 25, 99]
int poll = queue.poll(); // poll : 맨 앞의 원소 빼냄
System.out.println("poll : " + poll);
// poll : 10
System.out.println("Queue : " + queue);
// Queue : [5, 25, 99]
int remove = queue.remove(); // remove : 맨 앞의 원소 빼냄
System.out.println("remove : " + remove);
// remove : 5
System.out.println("Queue : " queue):
// Queue : [25, 99]
<참고>
https://dev-note-97.tistory.com/5
'ssung_항해일지 > CS 지식 및 기술면접' 카테고리의 다른 글
Exception(예외) 처리 (1) | 2023.05.19 |
---|---|
RDB & NoSQL (0) | 2023.05.18 |
오버로딩과 오버라이딩 (0) | 2023.05.18 |
절차지향, 객체지향, 함수형 프로그래밍 (0) | 2023.05.17 |
Stack & Queue / Array & LinkedList (0) | 2023.05.16 |