(4) Stack과 Queue

2022. 1. 13. 13:57·자바/컬렉션 프레임워크

1. Stack과 Queue

- Stack은 LIFO(Last In First Out)이고, Queue는 FIFO(First In First Out)이다.

 

- Stack은 ArrayList로, Queue는 LinkedList로 구현하는 것이 좋다. Queue 또한 ArrayList로 구현해도 되지만

데이터 삭제를 할 때 공간을 다시 채워주어야 하기 때문에, LinkedList가 유리하다.

 

 

- Stack의 메서드는 아래와 같다.

( 중요한 부분만 적었다. 상세한 내용은 자바의 정석 604p를 참고하자. )

 

(1) Object peek()

: Stack의 맨 위에 있는 저장된 객체를 반환한다. pop()과 달리 객체를 꺼내지는 않음

( 만약 비어있다면, EmptyStackException 발생 )

 

(2) Object push(Object item)

 

 

- Queue의 메서드는 아래와 같다.

( 중요한 부분만 적었다. 상세한 내용은 자바의 정석 605p를 참고하자. )

 

(1) boolean add(Object o)

 

(2) boolean offer(Object o)

: Queue에 객체를 저장한다.

 

(3) Object poll()

: Queue에서 객체 꺼내서 반환한다.

 

(4) Object element()

: 삭제없이 요소를 읽어온다.

 

 

- 스택은 수식계산, 수식괄호검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로 앞으로의 기능 구현을 활용한다.

 

- 큐는 최근 사용문서, 인쇄작업 대기목록, 버퍼의 기능 구현을 활용한다.

 

 

 

 

2. Stack을 이해하기 위한 예제(1)

: Stack을 활용하여 웹 브라우저의 '앞으로', '뒤로'의 기능을 구현하는 예제이다.

 

 

 

 

 

3. Queue을 이해하기 위한 예제(1)

: LinkedList를 이용하여 Unix의 history 명령어 구현하는 예제이다.

 

( 여기서 중요하게 봐야할 것은 LinkedList tmp = (LinkedList) q 와 ListIterator it = tmp.listIterator() 문장이다. )

 

 

 

 

4. PriorityQueue

- Queue 인터페이스의 구현체 중의 하나로, 저장한 순서에 관계없이 우선순위가 높은 것부터 꺼내게 된다는 특징이다.

 

- null은 저장될 수 없으며, 저장할 시 NullPointerException이 발생하게 된다.

 

- 저장공간으로는 배열을 사용하며, heap의 형태로 저장한다.

( 힙은 이진 트리의 한 종류로 가장 큰 값이나 가장 작은 값을 빠르게 찾을 수 있다는 특징이 있다. )

 

 

 

- 아래의 코드를 보고 이해하자.

 

( 내부 배열은 힙 형태로 저장되어 있어서 12534로 출력된다. )

 

( 31524 순서로 저장하였지만 poll() 꺼내서 보니 출력 값은 12534로 출력된다. 이것은 우선 순위가

작은 숫자를 높은 우선순위로 두었기 때문이다. )

 

( 위의 숫자들은 이미 Integer와 같은 Number 자손들은 자체적으로 숫자 비교하는 방법이 정의되어

있기 때문에 따로 구현할 필요 없다. )

 

( 또한 객체도 저장할 수 있는 우선순위는 프로그래머가 직접 비교할 수 있는 방법을 넣어서 구현할 수 있다. )

 

 

 

 

5. Deque

- Queue의 변형으로, 한 쪽 끝으로만 추가/삭제할 수 있는 큐와 달리 Deque는 양쪽 끝에 추가/삭제할 수 있다.

 

- 덱은 스택과 큐를 합쳐놓은 것과 같으며 스택 또는 큐로도 사용할 수 있다.

(1) offerLast()

: Stack -> push()

: Queue -> offer()

 

 

(2) pollLast()

: Stack -> pop()

 

 

(3) pollFirst()

: Queue -> poll()

 

 

(4) peekFirst()

: Queue -> peek()

 

 

(5) peekLast()

: Stack -> peek()

'자바 > 컬렉션 프레임워크' 카테고리의 다른 글

(6) Arrays  (0) 2022.01.17
(5) Iterator, ListIterator, Enumeration  (0) 2022.01.15
(3) LinkedList  (0) 2022.01.12
(2) ArrayList  (0) 2022.01.10
(1) 컬렉션 프레임웍이란?  (0) 2022.01.10
'자바/컬렉션 프레임워크' 카테고리의 다른 글
  • (6) Arrays
  • (5) Iterator, ListIterator, Enumeration
  • (3) LinkedList
  • (2) ArrayList
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      file
      java.lang패키지
      제자리 정렬
      outputstream
      java.time 패키지
      코드트리
      map()
      알고스팟
      serializable
      안정 정렬
      스트림
      ServerSocket
      Arrays
      역직렬화
      불안정 정렬
      TCP 소켓 프로그래밍
      람다식
      안드로이드 스튜디오
      InputStream
      코딩트리조별과제
      중간연산
      Collections Framework
      유용한 클래스
      선택 정렬
      다형성
      snail
      자바 개념
      소켓 프로그래밍
      문자 기반 스트림
      코딩테스트
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    (4) Stack과 Queue
    상단으로

    티스토리툴바