자바의 정석 ch11-15~18 스택과 큐 (Stack & Queue)

Luna·2023년 6월 14일
0

JAVA

목록 보기
24/32

스택과 큐 (Stack & Queue)

스택(Stack)

  • LIFO(Last In First Out)구조. 마지막에 저장(push)된 것을 가장 먼저 추출(pop)하게 된다. ArrayList로 구현하는 것이 적합하다.

큐(Queue)

  • FIFO(First In First Out)구조. 가장 먼저 저장(offer)한 것을 가장 먼저 추출(poll)하게 된다. LinkedList로 구현하는 것이 적합하다.

스택과 큐의 메서드

Stack의 메서드

  • Stack은 Stack이라는 Class가 있어서 밑에 처럼 사용하면 된다.
Stack st = new Stack();

boolen 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부터 시작). ArrayList의 indexOf()와 비슷하지만 0부터가 아니라 search는 1부터 시작한다.

Queue의 메서드

  • Queue는 Interface라서 객체 생성이 안된다.
    그래서 Quere를 직접 구현하거나, Quere를 구현한 클래스를 사용하면 된다.
  • Java API에서 Queue Interface를 구현한 class의 목록을 찾아서 사용
    해야 함. 참고 : Java 1.8 API -
Queue q = new LinkedList();
q.offer("데이터");
  • 참조변수를 Queue로 썼다는 얘기는 LinkedList와 다른 Queue를 상속받고 있는 클래스의 공통적인 부분만 썼다는 이야기 이다. 만약에 LinkedList를 참조변수로 써도 되지만, 그렇게 되면 Queue가 갖고 있지 않은 메서드들도 쓸 수 있으므로 검토 해야 한다. Queue를 쓰면 다른 클래스 어떤걸 써도 상관 없다.

자주 쓰는것은 *로 표시

boolen add(Object o)
: 지정된 객체를 Queue에 추가한다. 성공하면 true를 반환. 저장 공간이 부족하면 IllegalStateException 발생.
Object remove()
: Queue에서 객체를 꺼내 반환. 비어 있으면 NoSuchElementException 발생. 예외가 발생 하므로 try~catch로 처리 해야 한다.
Object element()
: 삭제 없이 요소를 읽어온다. peek와 달리 Queue가 비었을 때 NoSuchElementException 발생.
boolean offer(Object o) *
: Queue에 객체를 저장. 성공하면 true, 실패하면 false를 반환.
Object poll() *
: Queue에서 객체를 꺼내서 반환. 비어있으면 null을 반환. if(obj == null)로 처리를 해야 한다.
Object peek() *
: 삭제 없이 요소를 읽어온다. Queue가 비어있으면 null을 반환.

0개의 댓글