Cũng giống Java thì Kotlin cũng có khái niệm về Collections. Một Collections thường sẽ chứa các đối tượng (object) có cùng kiểu dữ liệu. Các đối tượng (object) nằm collection được gọi là các phần tử (element hoặc item).
Kotlin có 2 loại collection là Immutable Collection và Mutable Collection.
1. Immutable Collection
Như ý nghĩa tên của mình, Immutable Collection chỉ cho phép việc đọc dữ liệu từ các phần tử nó chứa. Mọi công việc liên quan đến chỉnh sửa dữ liệu của các phần tử sẽ không được hỗ trợ.
Immutable Collection gồm:
- List – listOf() và listOf<T>()
- Set – setOf()
- Map – mapOf()
List là một collection mà các phần tử bên trong nó được sắp xếp theo thứ tự, và ta có thể dùng vị trí được đặt của phần tử trong List để truy cập vào phần tử đó (ví trí này gọi là index). Các phần tử có thể xuất hiện hoặc được lặp lại nhiều lần trong 1 List. Việc thêm mới hoặc xoá phần tử ra khỏi immutable list sẽ gây ra lỗi khi biên dịch.
fun main() { val immutableList = listOf("A", "B", "C") for(item in immutableList) { println(item) } }
Sau khi chạy chương trình kết quả sẽ là:
A
B
C
Set là một tập hợp các phần tử mà không theo một thứ tự sắp xếp, các phần tử không thể được lặp lại trong một Set. Nghĩa là các phần tử trong một Set sẽ là duy nhất trong Set đó. Chúng ta cũng không thể thực hiện việc thêm mới hay xoá các phần tử trong một immutable Set.
fun main() { val immutableSet = setOf(5, "A", "B", "C", 5, 5, 5, 6) for(item in immutableSet) { println(item) } }
Kết quả nhận được là:
5
A
B
C
6
Như kết quả trên ta thấy khi khai báo immutableSet ta đã khai bao 4 phần tử là 5. Tuy nhiên sau đó immutableSet đã loại bỏ các phần tử giống nhau để đảm bảo tính duy nhất của một phần tử trong một Set.
Map là một danh sách các dữ liệu đi với nhau theo cặp key – value, các key sẽ là duy nhất và mỗi key sẽ có một giá trị trị của nó (value). Các giá trị của những key khác nhau có thể giống nhau. Tương tự như immutable List và Set thì Map cũng chỉ hỗ trợ việc đọc dữ liệu.
fun main() { val immutableMap = mapOf("name" to "A", "age" to 18) for(key in immutableMap.keys) { println("$key is ${immutableMap[key]}") } }
Kết quả là:
name is A
age is 18
2. Mutable Collection
Khác với Immutable Collection thì Mutable Collection cho phép chúng ta ngoài việc đọc thì có thể sửa hoặc thêm các phần tử.
Mutable Collection cũng bao gồm:
- List – mutableListOf(), arrayListOf() và ArrayList
- Set – mutableSetOf(), hashSetOf()
- Map – mutableMapOf(), hashMapOf() và HashMap
List cũng giống như immutable List tuy nhiên ta có thể xoá và thêm các phần tử trong list.
fun main() { val mutableList = mutableListOf("A", "B", "C") //Sửa phần tử vị trí số 0 từ A -> E mutableList[0] = "E" println("Danh sách sau khi sửa") for(item in mutableList) { println(item) } //Thêm phần tử F và danh sách mutableList.add("F") println("\nDanh sách sau khi thêm") for(item in mutableList) { println(item) } //Xoá phần tử số 2 khỏi danh sách mutableList.removeAt(2) println("\nDanh sách sau khi xoá phần tử số 2") for(item in mutableList) { println(item) } }
Kết quả sau khi chạy:
Danh sách sau khi sửa
E
B
C
Danh sách sau khi thêm
E
B
C
F
Danh sách sau khi xoá phần tử số 2
E
B
F
Set mutable Set cũng cho phép chúng ta đọc, thêm và xoá của các phần tử bên trong nó. Các phần tử được thêm mới sẽ được sắp xếp theo ví trí tương ứng của nó.
fun main() { //Khai báo và chỉ rõ kiểu dữ liệu sẽ được chứa trong Set ở đây là Int val mutableSet = mutableSetOf<Int>(6, 7, 9) //Thêm mới phần tử mutableSet.add(10) println("\nDanh sách sau khi thêm") for(item in mutableSet) { println(item) } //Thêm mới phần tử đã tồn tại trong Set có giá trị là 7 mutableSet.add(7) println("\nDanh sách sau khi thêm phần tử đã tồn tại") for(item in mutableSet) { println(item) } //Xoá phần tử 7 trong set mutableSet.remove(7); println("\nDanh sách sau khi xoá") for(item in mutableSet) { println(item) } }
Kết quả:
Danh sách sau khi thêm
6
7
9
10
Danh sách sau khi thêm phần tử đã tồn tại
6
7
9
10
Danh sách sau khi xoá
6
9
10
Map – mutable Map cũng hỗ trợ việc thêm mới, sửa và xoá các phần tử thông qua các hàm như put, remove, clear,…
Ví dụ:
fun main() { //Khai báo và chỉ rõ kiểu dữ liệu key - value của Map val mutableMap = mutableMapOf<String, Int>("A" to 1, "B" to 2) //Thêm mới phần tử mutableMap.put("C", 5) println("\nDanh sách sau khi thêm") for(key in mutableMap.keys) { println("$key is ${mutableMap[key]}") } //Sửa giá trị của key A mutableMap.put("A", 10) println("\nDanh sách sau khi sửa") for(key in mutableMap.keys) { println("$key is ${mutableMap[key]}") } //Xoá phần tử có key là B mutableMap.remove("B") println("\nDanh sách sau khi xoá") for(key in mutableMap.keys) { println("$key is ${mutableMap[key]}") } }
Kết quả:
Danh sách sau khi thêm
A is 1
B is 2
C is 5
Danh sách sau khi sửa
A is 10
B is 2
C is 5
Danh sách sau khi xoá
A is 10
C is 5
Leave a Reply