본문 바로가기

Java

Java 스택과 큐

 

1. 스택(Stack)

- LIFO(Last In First Out) 구조로 마지막에 저장(push)된 것을 제일 먼저 꺼냄(pop)

- 순차적으로 저장하는 스택은 배열(ArrayList)로 저장하는 것이 효율적 

- 스택(Stack) class의 메서드

메서드 설명
boolean empty() 스택이 비어있는지 알려줌
Object peek() - 스택의 맨 위에 저장된 객체 반환
- pop()과 달리 스택에서 객체를 꺼내지는 않음(비었을 때는 EmptyStackException 발생)
Object pop() 스택의 맨 위에 저장된 객체를 꺼냄(비었을 때는 EmptyStackException 발생)
Object push(Object item) 스택에 객체(item)저장
int search(Object o) - 스택에서 객체(o)를 찾아 그 위치를 반환
- 못찾으면 -1 반환(배열과 달리 위치는 0이 아닌 1부터 시작)

- 스택 활용 예: 수식 계산, 수식 괄호 검사, 워드프로세서의 undo/redo, 웹 브라우저의 뒤로/앞으로

 


2. 큐(Queue)

- FIFO(First In First Out)구조로 제일 먼저 저장(offer)한 것을 제일 먼저 꺼냄(poll)

- 추가/삭제 시 자리 이동이 없는 연결 리스트(Linked List)로 저장하는 것이 효율적

- 큐(Queue) 인터페이스 메서드

메서드 설명
boolean add(Object o) - 지정된 객체를 큐에 추가
- 성공하면 true 반환
- 저장 공간이 부족한 경우 IllegalStateException 발생
Object romove() 큐에서 객체를 꺼낸 반환 비어있으면 NoSuchElementException 발생
Object element() - 삭제없이 요소를 읽어옴
- peek과 달리 큐가 비었을 때 NoSouchElementException 발생
boolean offer(Object o) - 큐에 객체를 저장
- 성공 시 true, 실패 시 false 반환
Object poll() - 큐에서 객체를 꺼내서 반환
- 비어있으면 null 반환
Object peek() - 삭제없이 요소를 읽어옴
- 큐가 비어있으면 null 반환

- 큐를 사용하는 방법

1) 직접 구현하기

2) 큐 인터페이스를 구현한 클래스를 상속받아 사용하기

- 큐 활용 예: 최근 사용 문서, 인쇄 작업 대기 목록, 버퍼