Diary of Duc

Kotlin – Collections

2018-05-17

Collections là gì? Theo Google dịch thì nó là “bộ sưu tập”, mình hiểu nó là 1 kiểu tập hợp các phần tử có cùng kiểu dữ liệu hoặc không (mảng, danh sách).

Array (mảng)

Cái này thì cơ bản quá rồi, chỉ khác là trong Kotlin sử dụng arrayOf() để xây dựng 1 mảng.

Đây là mảng tuần tự, phần tử trong mảng được đánh chỉ số tăng dần từ 0.

Nếu một mảng các phần tử toàn số nguyên, biên dịch sẽ tự hiểu đó là mảng kiểu số nguyên Int, đúng với các kiểu dữ liệu khác.

Ngoài ra Kotlin có mảng hỗn hợp, các phần tử khác kiểu dữ liệu .Nếu không muốn điều này xảy ra ta dùng arrayOf<data_type> để xác định trước kiểu của phần tử trong mảng.

1
2
3
4
5
6
7
8
9
10
11
12
13
//array Integer
val arrInt = arrayOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//aray String
val arrString = arrayOf<String>("john", "emily", "bomi", "ji-young")
//or
val arrString = arrayOf<String>("john", "emily", "bomi", "ji-young")

//array Mixed
val arrMixed = arrayOf("john", "emily", "bomi", 1, 2, "ji-young")

//array with 5 element have value is: John
val arr: Array<String> = Array(5){"john"}


List (Danh sách)

List thì khác gì so với Array, đơn giản là List có thể thay đổi, thêm, xóa phần tử còn Array thì không.

Class List là một interface và nên dùng ArrayList để triển khai nó.

Mỗi phần từ trong List được đánh chỉ mục tăng dần từ 0.

Ta có thể dùng listOf để tạo 1 list, nhưng sẽ không có các phương thức để thêm, bớt phần tử, đây là list cố định:

1
2
3
4
5
6
7
8
//list Integer
val listInt = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

//list String
val listString = listOf<String>("john", "emily", "bomi", "ji-young")

//list Mixed
val listMixed = listOf("john", "emily", "bomi", "ji-young", 1, 2)

Triển khai List bằng ArrayList, dùng arrayListOf() để tạo, ta có sẵn các phương thức để thêm, bớt, đây là list động:

1
2
3
4
5
val arrListInt = arrayListOf<Int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

val arrListString = arrayListOf<String>("john", "emily", "bomi", "ji-young")

val arrListMixed = arrayListOf("john", "emily", "bomi", "ji-young", 1, 2)

Ta cũng có thể triển khai bằng MutableList, dùng mutableListOf để tạo, nhưng với phiên bản Kotlin hiện tại nó chính là một thể hiện của ArrayList, dó đó vào thời điểm viết bài nó không khác gì ArrayList.

1
val mutableList = mutableListOf<String>("john", "emily", "bomi", "ji-young")


Map

Map thì khác gì List với Array?

Đơn giản là ListArray các phần tử được đánh index (chỉ mục) tuần tự tăng dần từ 0, hay mỗi phần tử có key chính là chỉ mục (số nguyên) tương ứng vị trí của phần tử đó.

Quay lại với Map, ta sẽ tự đi định nghĩa key cho phần tử, key có thể là số, là chuỗi, mỗi phần tử khác nhau có key khác nhau, để tìm đến một phần tử, ta chỉ việc gọi key của nó.

Class Map là một interface, ta nên dùng mutableMapOf() để triển khai nó.

Ta có thể dùng mapOf() để tạo 1 map, nhưng nó là Map cố định, hay còn gọi là Map chỉ đọc:

1
2
3
4
5
6
7
8
//key is String, value is String
val mapA = mapOf<String, String>("name" to "bomi", "sex" to "female", "address" to "korea")

// key is String, value is Integer
val mapB = mapOf<String, Int>("age" to 18, "phone" to 123456789)

//map Mixed
val mapC = mapOf("name" to "bomi", "sex" to "female", "age" to 18, "address" to "korea")

Triển khai Map bằng mutableMapOf, ta sử dụng mutableMapOf() để tạo một Map, đây là Map động, có thể thay đổi, thêm bớt các phần tử:

1
2
3
4
5
val mutableMapA = mutableMapOf<String, String>("name" to "bomi", "sex" to "female", "address" to "korea")

val mutableMapB = mutableMapOf<String, Int>("age" to 18, "phone" to 123456789)

val mutableMapC = mutableMapOf("name" to "bomi", "sex" to "female", "age" to 18, "address" to "korea")

Từ nay về sau, khi khởi tạo biến, mình sẽ không gán trước kiểu của biến nữa, sẽ gán thẳng giá trị luôn. Kotlin không yêu cầu phải chỉ ra kiểu của biến:

1
2
3
4
// thay vi
val name: String = "John"
// tu nay se dung
val name = "John"
Tags: kotlin

URL QR