자바의 정석을 통해 공부한 내용을 요약하였습니다.
Stack
1. 특징
- LIFO(Last In First Out)구조이다.
- 순차적으로 데이터를 추가하고 삭제하기 때문에 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합하다.
2. 메서드
- boolean empty() - Stack이 비어있는지 알려줌
- Object peek() - Stack의 맨 위에 저장된 객체를 반환
- Object pop() - Stack의 맨 위에 저장된 객체를 꺼낸다.
- Object push(Object item) - Stack에 객체를 저장한다.
Stack<Integer> st = new Stack<>();
st.push(1);
st.peek();
st.pop();
st.empty();
Queue
1. 특징
- FIFO(Frist In First Out)구조이다.
- Queue는 항상 첫 번째 저장된 데이터를 삭제하므로 배열 기반의 클래스보다 데이터의 삭제/추가가 쉬운 LinkedList로 구현하는 것이 적합하다.
- Queue는 인터페이스로만 정의되어 있어 직접 구현하거나 Queue인터페이스를 구현한 클래스들을 사용해야 한다. (ex. LinkedList, ArrayDeque 등등)
Queue q = new LinkedList();
2. 메서드
- boolean offer(Object o) - Queue에 객체를 저장, 실패하면 false를 반환
- Object poll() - Queue에서 객체를 꺼내서 반환, 비어있으면 null을 반환
- Object peek() - 삭제없이 요소를 읽어옴, 비어있으면 null을 반환
- boolean add(Object o) - offer()와 동일하나 실패 시 예외 발생
- Object remove() - poll()과 동일하나 실패 시 예외 발생
- Object element() - peek()과 동일하나 실패 시 예외 발생
Queue q = new LinkedList();
q.offer("0");
q.peek();
q.poll();
Stack과 Queue의 활용
1. Stack
수식계산, 수식괄호검사, 웹브라우저의 뒤로/앞으로 등등
2. Queue
최근 사용 문서, 인쇄작업 대기목록, 버퍼 등등