Queue란?
queue는 사전적 의미로 줄, 줄을 서서 기다리다 라는 뜻을 가지고 있습니다.
queue 자료구조 또한 사전적 의미대로 입력받은 값들을 줄을 세워서 저장합니다.
ex) 빈 queue에 5, 3, 2, 1 순서대로 삽입하면 꺼낼 때는 5, 3, 2, 1 순서로 나오게 됩니다.
이러한 특성을 가지는 큐 자료구조는 선입선출(First In First Out - FIFO)
즉, 줄을 서서 기다리듯이 먼저 들어온 것이 먼저 나가게 되는 구조입니다.
일상생활에서 큐 자료구조와 비슷한 경우를 생각해보면 손님이 가득찬 식당 앞에서 줄 서서 기다리고 있는 상태와 동일합니다.
코틀린에서 queue 사용하기
코틀린 자체적으로는 Queue가 구현되어있지 않기 때문에 직접 구현하거나 java에 있는 Queue를 사용해야합니다.
Queue는 인터페이스 이므로 구현체로 LinkedList(클래스)를 사용하여 구현할 수 있습니다.
Queue와 LinkedList를 사용하기 위하여 java.util.*를 import해야합니다.
import java.util.*
Queue의 기능들
import java.util.*
fun main() {
val queue: Queue<Int> = LinkedList() // queue = []
// add, offer
queue.add(1) // queue = [1]
queue.offer(2) // queue = [1,2]
queue.add(3) // queue = [1,2,3]
queue.offer(4) // queue = [1,2,3,4]
// peek
println(queue.peek()) // 1 출력 - queue = [1,2,3,4]
// size
println(queue.size) // 4 출력 - queue = [1,2,3,4]
// remove, poll
println(queue.remove()) // 1 출력 - queue = [2,3,4]
println(queue.poll()) // 2 출력 - queue = [3,4]
// size
println(queue.size) // 2 출력 - queue = [3,4]
// element
println(queue.element()) // 3 출력 - queue = [3,4]
// isEmpty or isNotEmpty
println(queue.isEmpty()) // false 출력 - queue = [3,4]
println(queue.isNotEmpty()) // true 출력 - queue = [3,4]
// 큐가 빌 때 까지 모든 값 poll
while (queue.isNotEmpty()) {
println(queue.poll())
}
// 3 출력 - queue = [4]
// 4 출력 - queue = []
}
Queue 선언
Queue는 val queue: Queue<Int> = LinkedList()와 같은 형태로 선언하여 사용할 수 있습니다. < > 안에는 큐의 원소로 들어갈 자료형을 명시해줍니다.
Queue 값 삽입
Queue는 add() 혹은 offer()을 사용하여 값을 삽입할 수 있습니다.
add는 queue의 용량 제한이 발생하면 Exception이 발생하고
offer은 Exception을 발생시키지 않습니다.
LinkedList에서는 메모리의 한계까지 LinkedList를 만들지 않는 이상 용량 제한이 발생하기 힘들기 때문에 add, offer 둘 다 사용해도 큰 차이는 없습니다.
LinkedList를 사용하였기 때문에 시간 복잡도는 O(1)
Queue 첫 값 확인
Queue는 element() 혹은 peek()을 사용하여 첫 값을 확인할 수 있습니다.
element는 큐에 값이 없다면 NoSuchElementException을 발생시키고
peek은 null을 반환해줍니다.
LinkedList를 사용하였기 때문에 시간 복잡도는 O(1)
Queue 크기 확인
Queue는 size()를 사용하여 현재 Queue의 크기(원소들의 개수)를 확인할 수 있습니다.
Queue 첫 값 확인 및 삭제
Queue는 remove() 혹은 poll()을 사용하여 첫 값을 확인하고 삭제할 수 있습니다.
remove는 큐에 값이 없다면 NoSuchElementException을 발생시키고
poll은 null 반환해줍니다.
LinkedList를 사용하였기 때문에 시간 복잡도는 O(1)
Queue가 비었는지 확인
Queue는 isEmpty(), itNotEmpty()를 이용하여 현재 큐가 비었는지, 원소가 존재하는지 확인할 수 있습니다.
isEmpty()는 Queue가 비었을 경우 true를 반환, 그렇지 않다면 false를 반환.
isNotEmpty()는 Queue가 비었을 경우 false를 반환, 그렇지 않다면 true를 반환.
'코틀린[Kotlin]' 카테고리의 다른 글
코틀린에서 Thread 사용하기( + start()-스레드 시작, join()-스레드 대기상태로 만들기) (0) | 2022.07.31 |
---|---|
코틀린으로 크롤링하기(Jsoup) (0) | 2022.07.20 |
코틀린(Kotlin)에서 스택(Stack) 사용하기 (0) | 2022.07.08 |
코틀린에서 가변인자(vararg) 사용하기 (0) | 2022.07.06 |
코틀린 하나 혹은 순차적인 기준을 가지고 정렬하기(sortBy, sortedBy, sortWith, sortedWith, compareBy) (0) | 2022.06.23 |
최근댓글