본문 바로가기
java

collection framework

by proudev 2023. 8. 31.

스택과 큐(stack & Queue)

스택(Stack) : LIFO구조, 마지막에 저장된 것을 제일 먼저 꺼내게 된다.

LIFO(Last In First Out) : 저장할때 순서와 추출할때 순서가 반대이다. 밑이 막힌 상자

저장: push

추출: pop

스택을 만들려면 배열이 더 효율적이다.

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

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

 

 

큐(Queue) : FIFO구조. 제일 먼저 저장한 것을 제일 먼저 꺼낸다.

FIFO(First In First Out) : 저장할때 순서와 추출할때 순서가 같다.  줄서기와 동일하다. 양 끝이 뚤린 상자

저장 : offer

추출 : poll

큐는 링크드 리스트가 더 효율적이다.

메서드 설   명
boolean add(Object o) 지정된 객체를 Queue에 추가한다. 성공하면 true를 반환.
저장공간이 북족하면 IllegalStateException 발생
Object remove() Queue에서 객체를 꺼내 반환
비어 있으면 NoSuchElementException 발생
Object element() 삭제없이 요소를 읽어온다.
peek와 달리 Queue가 비었을 때 NoSuchElementException 발생
boolean offer(Object o) Queue에 객체를 저장. 성공하면 true, 실패하면 false를 반환
Object poll() Queue에서 객체를 꺼내서 반환. 비어있으면 null을 반환
Object peek() 삭제없이 요소를 읽어 온다. Queue가 비어있으며 null을 반환

여기서 add와 offer의 공통점은 객체를 저장하는 것이고 차이점은 예외를 발생시키지는에 대한 여부이다.

add는 예외를 발생시키고, offer은 예외를 발생시키지 않는다.

이것은 remove와 poll메서드도 마찬가지이다. 공통점은 객체를 꺼내서 삭제하는 것이며, remove는 예를 발생시키고 poll은 예외를 발생시키지 않는다.

 

자바에서 Queue는 인터페이스이다.

Queue q = new Queue() 안된다. 즉 인터페이스는 객체가 아님으로 참조변수 사용은 가능하나 객체를 생성해서 사용할 순 없다.

Queue q = new Queue();  // new Queue() 불가능함

그래서 Queue를 직접 구현 또는 Queue를 구현한 클래스를 사용한다.

Queue를 구현한 클래스 사용하기

Queue q = new LinkedList();  가능함
Queue q = new ArrayQueue();  가능함
Queue q = new DelayQueue();  가능함

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

'java' 카테고리의 다른 글

collection framework : Arrays  (0) 2023.09.01
collection framework : Iterator, Enumeration, Map  (0) 2023.08.31
collection framework : LinkedList  (0) 2023.08.29
[java] 배열  (0) 2023.08.12
[java] 조건문, 반복문  (0) 2023.08.10

댓글