본문 바로가기
프로그래밍 언어/Kotlin

코테용 코틀린 정리 (4) - 스택(stack), 큐(queue), 덱(deque)

by fortissimo 2024. 7. 3.

스택(stack)


코틀린에서 스택은 구현되어 있지 않다.  java.util 패키지에 존재하는 Stack 혹은 ArrayDeque를 사용하거나 kotlin.collections 패키지의 ArrayDeque를 사용해야 한다.

 

- 선언 및 초기화

import java.util.*

fun main() {
	val stack1: Stack<Int> = Stack() //java.util.Stack 사용.
	val stack2: Deque<Int> = ArrayDeque() //코틀린 혹은 java.util의 ArrayDeque 사용.
}

java.util.Stack

해당 패키지의 스택은 Vector로 구현되어 있다.

 

함수

  • E push(E item): 스택에 item을 추가한다. 추가한 item을 반환한다.
  • E pop(): 스택의 top에 있는 값을 꺼내 반환한다. 스택이 비었다면 EmptyStackException을 반환한다.
  • E peek() 스택의 top에 있는 값을 반환한다. 스택이 비었다면 EmptyStackException을 반환한다.
  • Boolean empty(): 스택이 비었는지 확인한다. 비어있다면 true를, 아니라면 false를 반환한다.
  • Int search(E item): item이 스택에서 몇번째로 빠져나올 수 있는지를 반환한다. item이 스택에 없다면 -1을 반환한다.

https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html

 

Stack (Java Platform SE 8 )

The Stack class represents a last-in-first-out (LIFO) stack of objects. It extends class Vector with five operations that allow a vector to be treated as a stack. The usual push and pop operations are provided, as well as a method to peek at the top item o

docs.oracle.com

 

java.util.ArrayDeque

함수

  • void push(E item): 스택에 item을 추가한다. deque의 첫번째에 삽입된다. item이 null이라면 NullPointerException을 반환한다.
  • E pop(): 스택의 top에 있는 원소(=deque의 첫번째 원소)을 꺼내 반환한다. deque가 비었다면 NoSuchElementException을 반환한다.
  • E peek(): deque의 top에 있는 값을 반환한다. deque가 비었다면 null을 반환한다.
  • Boolean isEmpty(): deque이 비었는지 확인한다. 비어있다면 true를, 아니라면 false를 반환한다.
  • Int size(): deque의 크기를 반환한다.

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayDeque.html

 

ArrayDeque (Java Platform SE 8 )

Resizable-array implementation of the Deque interface. Array deques have no capacity restrictions; they grow as necessary to support usage. They are not thread-safe; in the absence of external synchronization, they do not support concurrent access by multi

docs.oracle.com

 

큐(queue)


마찬가지로 코틀린에서 큐가 구현되어 있지 않아  java.util 패키지에 존재하는 Queue나 kotlin.collections.ArrayDeque를 사용한다. java.util 패키지에 있는 Queue는 인터페이스이기 때문에 LinkedList로 구현한다. 이 경우 큐의 구현이 LinkedList로 이루어지기 때문에 java.util.Queue와 java.util.LinkedList 둘 다 import가 필요하다.

 

- 선언 및 초기화

import java.util.*
import kotlin.collections.ArrayDeque

fun main() {
	val queue1: Queue<Int> = LinkedList() //java.util.Queue 사용.
	val queue2: Deque<Int> = ArrayDeque() //코틀린 ArrayDeque 사용.
}

 

java.util.Queue

 

함수

  • Boolean add(E element): 큐에 element를 추가한다. 정상적으로 추가되었다면 true를, 아니라면 false를 반환한다. 용량으로 인해 삽입이 불가능하다면 IllegalStateException이 발생한다.
  • Boolean offer(E element): 큐에 element를 추가한다. 정상적으로 추가되었다면 true를, 아니라면 false를 반환한다.
  • E remove(): 큐의 헤드에 존재하는 원소를 큐에서 빼내 반환한다. 큐가 비어있다면 NoSuchElementException 오류가 발생한다.
  • E poll(): 큐의 헤드에 존재하는 원소를 큐에서 빼내 반환한다. 큐가 비어있다면 null을 반환한다.
  • E elemet(): 큐의 헤드에 존재하는 원소를 반환한다. 큐가 비어있다면 NoSuchElementException 오류가 발생한다.
  • E peek(): 큐의 헤드에 존재하는 원소를 반환한다. 큐가 비어있다면 null을 반환한다.

이외의 java.util.collections로부터 상속받은 Boolean isEmpty(), Int size()등을 사용할 수 있다.

 

https://docs.oracle.com/javase/8/docs/api/java/util/Queue.html

 

Queue (Java Platform SE 8 )

A collection designed for holding elements prior to processing. Besides basic Collection operations, queues provide additional insertion, extraction, and inspection operations. Each of these methods exists in two forms: one throws an exception if the opera

docs.oracle.com

 

 

덱(데큐, deque)


kotlin.collections.ArrayDeque

deque이므로 양방향에서 삽입 및 삭제가 가능하다.

 

함수

 

추가

  • Boolean add(E item): deque의 끝에 item을 추가한다. 항상 연산대로 수행되므로 항상 true를 반환한다.
  • void addFirst(E item): deque의 처음에 item을 추가한다.
  • void addLast(E item): deque의 마지막에 item을 추가한다.

삭제

  • Boolean remove(E item): item을 삭제한다. item이 존재하지 않는다면 false를, item이 존재하여 삭제되었다면 true를 반환한다.
  • E removeAt(Int index): index에 있는 원소를 삭제한다.
  • E removeFirst(): deque의 처음에 있는 원소를 삭제한다. deque가 비어있다면 NoSuchElementException이 발생한다.
  • E removeLast(): deque의 마지막에 있는 원소를 삭제한다. deque가 비어있다면 NoSuchElementException이 발생한다.

 

  • void clear(): deque를 초기화한다.
  • Boolean isEmpty(): deque가 비어있는지 확인한다. 비어있다면 false를, 아니라면 true를 반환한다.
  • Boolean contains(E item): deque에 아이템이 있는지 확인한다. 있다면 true를, 없다면 false를 반환한다.
  • E first(): deque의 처음을 반환한다. deque가 비어있다면 NoSuchElementException이 발생한다.
  • E last(): deque의 마지막을 반환한다. deque가 비어있다면 NoSuchElementException이 발생한다.
  • E get(Int index): index에 있는 원소를 반환한다.
  • Int indexOf(E element): element의 인덱스를 구해 반환한다.