백엔드/Java의 정석

TIL 정리_19

ran4 2022. 3. 6. 22:06

Stack과 Queue

Stack : LIFO(Last In First Out)구조, 마지막에 저장된 것을 제일 먼저 꺼내게 된다

저장 : push, 호출 : pop 한 방향 박스구조, 배열에 적합하다

Queue : FIFO(First In First Out)구조, 제일 먼저 저장한 것을 먼저 꺼낸다 

저장 : offer 호출 : poll 양 방향으로 뚫린 박스구조, 링크드 리스트에 적합하다

 

Stack의 메서드

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

 

Queue의 메서드

메서드 설명
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을 반환

 

스택과 큐의 활용

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

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

-> 해당 자료구조를 어디에 써야하는지 파악하기

 

Queue의 구현체

PriorityQueue : 저장순서에 관계없이 우선순위(priority)가 높은것부터 꺼낸다

Deque(덱)

한쪽 끝으로만 추가/삭제할 수 있는 Queue와 달리 Deque은 양쪽 끝에 추가/삭제가 가능하다

Queue를 조상으로 가지며, ArrayDeque와 LinkedList를 구현체로 갖는다.

스택과 큐를 하나로 합쳐놓은 것과 같다

 

Iterator, ListIterator, Enumberation 

컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다

EnumerationIterator의 구 버전이고 ListIteratorIterator의 접근성을 향상시킨 것이다

 

Iterator

컬렉션에 저장된 요소를 읽어오는 방법을 표준화한 것이다.

컬렉션에 Iterator()를 호출해 Iterator를 구현한 객체를 얻어 사용한다

 

Iterator의 메서드

메서드 설명
boolean hasNext() 읽어 올 요소가 남아있는지 확인. 있으면 true 없으면 false
Object next() next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다

 

Map과 Iterator

Map은 Iterator()를 호출할 수 없기때문에 ketSet(), entrySet() values()를 호출 후 Iterator를 호출해야한다

 

Iterator it = map.entrySet().iterator();의 실행순서 

1. map.entrySet()의 실행결과가 Set이므로

2. map.entrySet()을 통해 얻은 Set인스턴스의 iterator()를 호출해서 Iterator 인스턴스를 얻는다

3. 마지막으로 Iterator인스턴스의 참조가 it에 저장된다

 

 

'백엔드 > Java의 정석' 카테고리의 다른 글

TIL 정리_21  (0) 2022.03.08
TIL 정리_20  (0) 2022.03.07
TIL 정리_18  (0) 2022.03.05
TIL 정리_17  (0) 2022.03.04
TIL 정리_16  (0) 2022.03.03