일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- todo
- RecyclerView
- DialogFragment
- layout_constrainedWidth
- log
- WorkManager
- Navigation
- Lifecycle
- Load failed
- SSAID
- gradle plugin
- BottomSheetDialogFragment
- 화면 회전
- Room
- Collections Function
- 기기고유값
- http
- findNavController
- layout_constrainedHeight
- Android
- 생명주기
- Retrofit2
- NumberPIcker
- kotlin
- ThreeTen Backport
- json
- DataBinding
- Popup menu background color
- multipart
- studywithme
- Today
- Total
chacha's
[ Kotlin ] 코틀린에서 Queue 사용하기 본문
목차
C++ 에는 STL에 Queue
가 있습니다. 하지만 Kotlin에는 명확히 Queue라고 기재된 라이브러리가 없는 듯하였습니다. 대신 ArrayDeque
라고 보통은 덱(Deck)이라고 불리는 컬렉션이 있습니다. 사실 덱이 있다면 굳이 따로 큐를 선언하여 쓰지 않아도 된다고 생각하기 때문에 해당 라이브러리를 사용하는 것이 좋을 듯합니다.
📌 코틀린에서 Queue를 사용하는 방법은 3가지 정도 있습니다.
1️⃣ ArrayDeque 사용하기
2️⃣ Kotlin에 존재하는 여러 라이브러리 중 하나를 큐(Queue)처럼 사용하기
3️⃣ Java에서 제공하는 큐(Queue) 라이브러리 사용하기
⭐1️⃣ ArrayDeque 사용하기
ArrayDeque - Doc
Deque란 양방향에서 삽입, 삭제가 가능한 자료구조입니다. 이 자료구조를 큐처럼 사용할 수 있습니다.
import kotlin.collections.ArrayDeque
fun main() {
val arrayDeque = ArrayDeque<Int>()
arrayDeque.add(1)
arrayDeque.add(2)
arrayDeque.addLast(3) // .add() 와 동일하게 동작
print(arrayDeque) // [1,2,3]
arrayDeque.removeFirst()
print(arrayDeque) // [2,3]
}
🚥 Deque 이미지
2️⃣ ArrayList를 큐처럼 사용하기
Queue라는 자료구조는 C++을 이용할 때도 꼭 Queue STL을 선언하지 않고 Vector를 사용하여 구현하는 경우도 있었습니다. ( 사실 이 경우 pop 시에 O(n)의 시간이 걸리기 때문에 적절한 방법은 아닐 수 있습니다. )
Kotlin에서도 ArrayList를 활용하여 Qeueu를 구현하여 사용할 수 있습니다. C++의 vector와 같은 이유로 ArrayList는 remove 시에 O(n)의 시간이 걸리기 때문에 다른 방법을 사용하는 것이 적합할 것 같습니다.
3️⃣ Java의 Queue 라이브러리 사용하기
Kotlin Queue tutorial with examples
코틀린은 Jvm을 기반으로 하는 언어이기 때문에 자바에 존재하는 라이브러리를 사용할 수 있습니다. 자바에는 명확히 Queue
라고 명시된 라이브러리가 있습니다. ( Queue - Java Doc 참고 )
공식 문서를 참고하면 해당 라이브러리는 인터페이스로 되어 있고 Queue 인터페이스를 구현하고 있는 여러 클래스들이 있다는 것을 알 수 있습니다.
따라서 Java의 큐 라이브러리를 사용하려면 Queue 인터페이스를 구현하고 있는 클래스를 인스턴스화 하여 사용할 수 있습니다. 주로 LinkedList를 사용하는 듯합니다.
import java.util.Queue
import java.util.LinkedList
fun main(args: Array<String>) {
val nums: Queue<Int> = LinkedList<Int>()
val names: Queue<String> = LinkedList<String>(listOf("Jack", "Adam", "Katherin"))
val persons: Queue<Person> =
LinkedList<Person>(listOf(Person("Jack", 27), Person("Adam", 28), Person("Katherin", 19)))
}
END
'Kotlin' 카테고리의 다른 글
컬렉션(Collections) (0) | 2021.09.12 |
---|