So sánh Array và Collection trong Kotlin

I, Array

1
2
3
4
5
6
7
8
9
10
11
public class Array<T> {
public inline constructor(size: Int, init: (Int) -> T)

public operator fun get(index: Int): T

public operator fun set(index: Int, value: T): Unit

public val size: Int

public operator fun iterator(): Iterator<T>
}
  • Trong Kotlin, Array<T> là class chứa một mảng các phần tử có kiểu T.
  • Để tạo 1 array, chúng ta có thể sử dụng một trong các cách sau:
    • arrayOf(): tạo ra 1 array và mỗi phần tử không được phép null.
    • arrayOfNulls(): tạo ra 1 array các phần tử và cho phép phần tử null.
    • Array(): tạo ra một mảng với kích thước cố định và khởi tạo giá trị ban đầu cho từng phần tử.
  • Chú ý: Array không phải là 1 phần của Collection.
  • Ví dụ 1: tạo 1 Array
1
2
3
4
val array = arrayOf(1, 2, 3)

// Creates an Array<String> with values ["0", "1", "4", "9", "16"]
val asc = Array(5) { i -> (i * i).toString() }
  • Đối với primitive object type, Kotlin cung cấp sẵn các class để tạo ra array: ByteArray, CharArray, ShortArray, IntArray, LongArray, FloatArray, DoubleArrayBooleanArray. Chúng không có quan hệ gì với Array<T> class cả.

II, Collection

  • Chúng ta thường nhầm lẫn rằng Array là 1 phần của Collection. Điều này là không đúng.
  • Collection là một tập hợp các Object cùng kiểu.
  • Mỗi phần tử trong collection được gọi là element/item.
  • Collection có 3 kiểu cơ bản:
    • List là 1 tập hợp có thứ tự và mỗi item được truy cập thông qua chỉ số (vị trí). Chỉ số là các số integer. Một item có thể xuất hiện nhiều hơn 1 lần trong List (chỉ số khác nhau).
    • Set là 1 tập hợp các item mà mỗi item là duy nhất. Các element không được lặp lại do đó nó chỉ có thể chứa duy nhất 1 null item. Trong Set, thứ tự các item là không quan trọng.
    • Map (dictionary) là 1 tập các item có dạng key/value. Key là duy nhất dùng để phân biệt các item, value có thể được lặp lại.
  • Trong mỗi kiểu cơ bản chúng ta có thể chia nó làm 2 dạng:
    • Read-only: chỉ cho phép truy cập tới các item.
    • Mutable: read-only + khả năng write: add, remove và update.
  • Chúng ta có thể xem source code của các collection trong file Collections.kt
  • ListSet đều kế implement Collection interface.
  • Tuy Map không implement Collection nhưng nó vẫn là 1 kiểu của collection.