Cấu trúc dữ liệu với Kotlin: Kỹ năng cần biết
Kotlin cung cấp cho Lập trình viên trọn bộ tất cả những Cấu trúc dữ liệu cần dùng cho 1 chương trình. Hãy cùng mình khám phá các loại cấu trúc dữ liệu đó.
Array, String
Array, String là dạng cấu trúc dữ liệu phổ biến trong các logic của chương trình Kotlin. Chúng ta thường dùng chúng để lưu trữ dữ liệu dạng Text, Number hoặc là Object.
Tham khảo cách sử dụng Array theo ví dụ code bên dưới
fun main() {
// Ngoài ra còn có thể sử dụng FloatArray, DoubleArray, LongArray, ShortArray, ByteArray, CharArray, BooleanArray
val simpleIntegerArrayV1: IntArray = intArrayOf(1, 2, 3, 4, 5)
simpleIntegerArrayV1[0] = 10
// Hoặc chỉ cần sử dụng arrayOf
val simpleIntegerArrayV2: Array<Int> = arrayOf(1, 2, 3, 4, 5)
val simpleIntegerArrayV3: Array<Int> = Array(5) { i -> i + 1 }
val simpleIntegerArrayV4: Array<Int> = Array(5) { it + 1 }
val simpleIntegerArrayV5 = simpleIntegerArrayV4 + simpleIntegerArrayV3
val simpleIntegerArrayWithNullable: Array<Int?> = arrayOf(1, 2, 3, 4, 5, null)
simpleIntegerArrayV2.forEach {
println(it)
}
simpleIntegerArrayV2.forEachIndexed { index, i ->
println("Index: $index, Value: $i")
}
println(simpleIntegerArrayV5.joinTo(StringBuilder(), separator = ", ", prefix = "[", postfix = "]"))
}
Một số ứng dụng của Array trong chương trình thực tế: Lưu trạng thái của 1 đối tượng; Lưu lịch sử thay đổi; Cache dữ liệu chưa xử lý; ,,,
fun main() {
val greeting = "Hello"
val completeGreeting = "$greeting, Kotlin!"
println(completeGreeting)
// String Interpolation
val name = "DanTech0xFF"
println("Hello, $name!")
// Multiline Strings
val text = """
This is a multiline string.
It spans multiple lines.
"""
println(text)
// String Length
val textLength = "Hello, Kotlin Programming!"
println("Length of the string is ${textLength.length}")
// String to Int Conversion
val numberString = "123"
val number = numberString.toInt()
println(number + 1)
// String Comparison
val text1 = "Hello"
val text2 = "hello"
println(text1.equals(text2, ignoreCase = true))
// Substring
val substringText = "Hello, World!"
println(substringText.substring(0, 5))
// Replace
val replaceText = "Hello, Kotlin!"
println(replaceText.replace("Kotlin", "Kotlin Programming"))
}
Một số ứng dụng của String trong chương trình:
- Lưu nội dung JSON, Database Query, File Content …
- Cache nội dung của các View hiển thị Text
List, Stack, Queue
Tham khảo cách sử dụng List trong Kotlin theo ví dụ code bên dưới
fun main() {
val numbers: List<Int> = listOf(1, 2, 3, 4, 5)
println(numbers[0]) // Output: 1
println(numbers[1]) // Output: 2
println(numbers.size) // Output: 5
println(numbers.contains(3)) // Output: true
println(numbers.indexOf(4)) // Output: 3
println(numbers.lastIndexOf(5)) // Output: 4
println(numbers.subList(1, 4)) // Output: [2, 3, 4]
println(numbers.isNotEmpty())
val mutableNumbers = mutableListOf(1, 2, 3, 4, 5) // numbers.toMutableList()
mutableNumbers.add(6)
mutableNumbers.removeAt(0)
mutableNumbers[1] = 10
println(mutableNumbers) // Output: [2, 10, 3, 4, 5, 6]
}
Tham khảo cách sử dụng Stack, Queue theo code ví dụ bên dưới
fun main() {
// Deque is a double-ended queue that supports adding and removing elements from both ends
// support both mechanisms of stack and queue
val deque = ArrayDeque<Int>()
// Adding elements to the deque
deque.addFirst(1)
deque.addLast(2)
deque.addFirst(3)
deque.addLast(4)
println("Deque after adding elements: $deque")
// Removing elements from the deque
val removedFirst = deque.removeFirst()
val removedLast = deque.removeLast()
println("Removed first element: $removedFirst")
println("Removed last element: $removedLast")
println("Deque after removing elements: $deque")
// Iterating over the elements
println("Iterating over the elements:")
for (element in deque) {
println(element)
}
// Checking if deque contains a specific element
val containsThree = deque.contains(3)
println("Deque contains 3: $containsThree")
// Getting the size of the deque
val size = deque.size
println("Size of the deque: $size")
// Checking if the deque is empty
val isEmpty = deque.isEmpty()
println("Is deque empty: $isEmpty")
// Clearing the deque
deque.clear()
println("Deque after clearing: $deque")
}
Map, Set
Tham khảo cách khai báo và sử dụng các loại Map trong Kotlin theo code ví dụ bên dưới
fun main() {
val hashMap = mapOf(
"key1" to "value1",
"key2" to "value2",
"key3" to "value3"
) // Immutable Map
val mutableHashMap = mutableMapOf(
"key1" to "value1",
"key2" to "value2",
"key3" to "value3"
) // Mutable Map
val emptyHashMap = hashMapOf<String, String>() // Mutable empty HashMap
val manualHashMap: HashMap<String, String> = HashMap() // Mutable empty HashMap
val immutableHashMap: Map<String, String> = HashMap() // Immutable empty HashMap
}
Map
vàMutableMap
là interface để biểu thị cho tínhMutability
củaMap
HashMap
là một Implementation củaMutableMap
- Ngoài
HashMap
ta còn có thể sử dụng các Implementation khác của MutableMap ví dụ:LinkedHashMap
Tương tự như Map và MutableMap, List và MutableList -> chúng ta có Set và MutableSet trong Kotlin.
fun main() {
val hashSet = setOf("value1", "value2", "value3") // Immutable Set
val mutableHashSet = mutableSetOf("value1", "value2", "value3") // Mutable Set
val emptyHashSet = hashSetOf<String>() // Mutable empty HashSet
val manualHashSet: HashSet<String> = HashSet() // Mutable empty HashSet
val immutableHashSet: Set<String> = HashSet() // Immutable empty HashSet
}
Qua các ví dụ và kiến thức bên trên ta có thể thấy Kotlin là một ngôn ngữ rất chặt chẽ về mặt cú pháp thông quan việc phân định rõ Mutable và Immutable. Chính vì vậy trong quá trình làm việc bạn sẽ tránh được nhiều sai sót không đáng có do việc thay đổi, cập nhật dữ liệu không đúng nơi.