[polldaddy poll=9764234]
Không giống như các ngôn ngữ lập trình khác, Kotlin phân biệt rõ 2 loại Collections(Mutable collections và Immutable collections).
Mô hình lớp kế thừa của các Collection trong Kotlin/java:
Mutable Collections là tập các lớp dùng để lưu trữ danh sách dữ liệu và có thể thay đổi kích thước được
Immutable Collections là tập các lớp dùng để lưu trữ danh sách dữ liệu và không thể thay đổi kích thước được
Cả 2 loại Collections này rất dễ tạo và sử dụng, chỉ khác nhau chút xíu ở mục đích sử dụng của lập trình viên.
Trong giới hạn bài học này Tui chỉ trình bày về MutableList và List, các lớp Collection khác các bạn tự tìm hiểu thêm nếu trong dự án có gặp. Tuy nhiên với MutableList và List thì theo Tui bạn đã có thể xử lý được hầu hết các trường hợp lưu trữ, tương tác, hiển thị dữ liệu trong phần mềm rồi.
MutableList Là collection có thể thay đổi kích thước dữ liệu: Có thể thêm, sửa, xóa…
List Là collection chỉ có nhiệm vụ readOnly, dùng để hiển thị thông tin. Và dĩ nhiên nó sẽ tối ưu bộ nhớ hơn so với MutableList. Do đó nếu như bạn chỉ muốn hiển thị thông tin thì nên dùng List.
Các collection trong Kotlin không có các Constructor khởi tạo riêng, mà nó thông qua các hàm mutableListOf(), listOf() để khởi tạo
Ví dụ 1 dưới đây mình họa cách khởi tạo 2 collections:
[code language=”groovy”]
var ds1:MutableList =mutableListOf()
var ds2:List = listOf()
[/code]
Ở trên 2 đối tượng ds1 và ds2 được khởi tạo với danh sách rỗng.
Ta có thể khởi tạo với một số dữ liệu ban đầu,
Ví dụ 2
[code language=”groovy”]
var ds1:MutableList =mutableListOf(5,6,1,0,4)
var ds2:List = listOf(1,2,3,4)
[/code]
Ở trên ds1 được khởi tạo mặc định với 5 phần tử và ta có thể thay đổi thông tin, kích thước ds1
ds2 được khởi tạo mặc định với 4 phần tử và ta không thể thay đổi thông tin, kích thước ds2. Khi ta dùng List tức là trong đầu ta muốn rằng nó là readOnly, chỉ hiển thị dữ liệu mà thôi.
Dưới đây là một số phương thức thường dùng với MutableList/List:
Tên Thuộc tính/phương thức | Mô tả |
size | Thuộc tính trả về kích thước thực sự của Collection |
[i] | Indexer cho phép truy suất và thay đổi giá trị tại vị trí i của collection |
add() | Thêm một phần tử |
addAll() | Thêm nhiều phần tử |
removeAt() | Xóa theo vị trí |
remove() | Xóa theo đối tượng |
removeIf{} | Xóa theo điều kiện |
clear() | Xóa toàn bộ danh sách |
sort() | Sắp xếp tăng dần |
sortDescending() | Sắp xếp giảm dần |
filter { } | Lọc dữ liệu |
contains() | Kiểm tra Collection có chứa phần tử nào đó hay không |
Và còn nhiều các phương thức lợi hại khác, các bạn tự tìm hiểu thêm nhé.
Ví dụ 3 – Thao tác với List:
[code language=”groovy”]
/**
* Created by cafe on 29/05/2017.
*/
fun main(args: Array) {
var ds:List = listOf(5,6,1,9,-4,7,8,2)
println(“Các phần tử trong List cách 1:”)
for(i in ds.indices)
print(“${ds[i]}\t”)
println()
println(“Các phần tử trong List cách 2:”)
for(i in ds)
print(“$i\t”)
println()
println(“Các phần tử sắp xếp tăng dần:”)
var ds2= ds.sorted()
for(i in ds2)
print(“$i\t”)
println()
println(“Các phần tử sắp xếp giảm dần:”)
var ds3= ds.sortedDescending()
for(i in ds3)
print(“$i\t”)
println()
var ds4=ds.filter { x->x%2==0 }
println(“Các phần tử chẵn:”)
for(i in ds4)
print(“$i\t”)
println()
println(“SUM=”+ds.sum())
println(“MAX=”+ds.max())
println(“MIN=”+ds.min())
println(“AVERAGE=”+ds.average())
}
[/code]
Kết quả khi chạy ta thấy:
Các phần tử trong List cách 1: 5 6 1 9 -4 7 8 2 Các phần tử trong List cách 2: 5 6 1 9 -4 7 8 2 Các phần tử sắp xếp tăng dần: -4 1 2 5 6 7 8 9 Các phần tử sắp xếp giảm dần: 9 8 7 6 5 2 1 -4 Các phần tử chẵn: 6 -4 8 2 SUM=34 MAX=9 MIN=-4 AVERAGE=4.25 |
Ta để ý các phương thức của List đa phần không làm thay đổi nội tại List mà nó trả về một List mới.
Ví dụ 4 – Thao tác với MutableList:
[code language=”groovy”]
/**
* Created by cafe on 29/05/2017.
*/
fun main(args: Array) {
var ds:MutableList = mutableListOf()
ds.add(10)//thêm một phần tử có giá trị 10
ds.add(4)//thêm một phần tử có giá trị 4
ds.add(5)//thêm một phần tử có giá trị 5
ds.add(8)//thêm một phần tử có giá trị 8
ds.addAll(mutableListOf(9,0,7))//thêm một danh sách có 3 phần tử: 9,0,7
println(“Các phần tử trong MutableList – theo giá trị:”)
for(i in ds)
print(“$i\t”)
println()
println(“Các phần tử trong MutableList – theo vị trí:”)
for(i in ds.indices)
print(“${ds[i]}\t”)
println()
ds[2]=113//đổi giá trị phần tử thứ 2 thành 113
println(“Các phần tử trong MutableList sau khi đổi:”)
for(i in ds.indices)
print(“${ds[i]}\t”)
println()
ds.removeAt(3)//xóa phần tử tại vị trí thứ 3
println(“Các phần tử trong MutableList sau khi xóa:”)
for(i in ds.indices)
print(“${ds[i]}\t”)
println()
ds.sort()//sắp tăng dần
println(“Các phần tử trong MutableList sau sắp tăng dần:”)
for(i in ds.indices)
print(“${ds[i]}\t”)
println()
ds.sortDescending()//sắp giảm dần
println(“Các phần tử trong MutableList sau sắp giảm dần:”)
for(i in ds.indices)
print(“${ds[i]}\t”)
println()
println(“SUM=”+ds.sum())
println(“MAX=”+ds.max())
println(“MIN=”+ds.min())
println(“AVERAGE=”+ds.average())
//lọc các số lẻ
var dsLe=ds.filter { x->x%2==1 }
println(“Các phần tử trong MutableList là số lẻ:”)
for(i in dsLe.indices)
print(“${dsLe[i]}\t”)
println()
var dsNT=ds.filter {
x->
var dem=0
for(i in 1..x)
{
if(x%i==0)
dem++
}
dem==2
}
println(“Các phần tử trong MutableList là số nguyên tố:”)
for(i in dsNT.indices)
print(“${dsNT[i]}\t”)
println()
}
[/code]
Kết quả khi chạy ta thấy:
Các phần tử trong MutableList – theo giá trị: 10 4 5 8 9 0 7 Các phần tử trong MutableList – theo vị trí: 10 4 5 8 9 0 7 Các phần tử trong MutableList sau khi đổi: 10 4 113 8 9 0 7 Các phần tử trong MutableList sau khi xóa: 10 4 113 9 0 7 Các phần tử trong MutableList sau sắp tăng dần: 0 4 7 9 10 113 Các phần tử trong MutableList sau sắp giảm dần: 113 10 9 7 4 0 SUM=143 MAX=113 MIN=0 AVERAGE=23.833333333333332 Các phần tử trong MutableList là số lẻ: 113 9 7 Các phần tử trong MutableList là số nguyên tố: 113 7 |
Ta thấy collection trong Kotlin rất linh động và mạnh mẽ, ta có thể tùy biến trong vấn đề xử lý. Hàm filter như là một cuộc cách mạng trong lọc dữ liệu.
Như vậy tới đây Tui đã hướng dẫn xong cách xử 2 Collection quan trọng trong Kotlin, các bạn chú ý học kỹ và hiểu được nó thông qua các ví dụ ở trên nhé. Cần thành thạo các Collection để có thể áp dụng tốt vào các dự án thực tế của mình.
Các bạn có thể tải source code bài này ở đây: http://www.mediafire.com/file/d1b3imc09aw60et/HocXuLyCollection.rar
Hẹn gặp các bạn ở những bài tiếp theo
Chúc các bạn thành công!
Trần Duy Thanh (http://communityuni.com/)
cám ơn ad nhiều ạ
Thưa thầy, về mặt kỹ thuật thì mình phân biệt collection và array như thế nào ạ?
hay