Bỏ qua để đến nội dung

📊 Mảng (Array)

🎯 Mục tiêu: Hiểu Array - cấu trúc dữ liệu kích thước cố định, khi nào dùng Array thay vì List.


Array có kích thước cố định, không thể thêm/xóa phần tử sau khi tạo.

val numbers = arrayOf(1, 2, 3, 4, 5)
numbers[0] = 10 // OK - thay đổi giá trị
// numbers.add(6) // ❌ Không có method này

// Generic array
val arr1 = arrayOf(1, 2, 3)
val arr2 = arrayOfNulls<String>(5) // [null, null, null, null, null]
val arr3 = Array(5) { it * 2 } // [0, 2, 4, 6, 8]
// Primitive arrays (tối ưu performance)
val intArr = intArrayOf(1, 2, 3)
val doubleArr = doubleArrayOf(1.0, 2.0, 3.0)
val boolArr = booleanArrayOf(true, false)
val charArr = charArrayOf('a', 'b', 'c')
// Empty arrays
val empty = emptyArray<Int>()
val intEmpty = IntArray(0)

val arr = arrayOf("a", "b", "c")
// Index
println(arr[0]) // a
println(arr.getOrNull(10)) // null
// Properties
println(arr.size) // 3
println(arr.indices) // 0..2
// Iteration
for (item in arr) println(item)
for (i in arr.indices) println("$i: ${arr[i]}")
for ((i, v) in arr.withIndex()) println("$i: $v")

val arr = arrayOf(1, 2, 3)
// To List
val list = arr.toList()
val mutableList = arr.toMutableList()
// From List
val backToArray = list.toTypedArray()
val intArray = list.toIntArray()
// To primitive array
val intArr = arr.toIntArray()

Aspect Array List
Size Fixed MutableList có thể thay đổi
Performance Tốt hơn với primitives Wrapper objects
Nullability Có thể null Thường non-null
Use case Interop với Java, performance General purpose

fun main() {
// TODO: Tạo matrix 3x3 và in ra
}

Lời giải:

fun main() {
val matrix = Array(3) { row ->
IntArray(3) { col -> row * 3 + col + 1 }
}
// In matrix
for (row in matrix) {
println(row.joinToString(" "))
}
// 1 2 3
// 4 5 6
// 7 8 9
}

  • Tạo Array với arrayOf(), Array(size) { }
  • Sử dụng primitive arrays cho performance
  • Convert giữa Array và List
  • Biết khi nào dùng Array vs List

Tiếp theo: Collections Operations