Mảng là gì?
Mảng là một tập hợp gồm một số cố định các phần tử có cùng kiểu dữ liệu, mảng được sử dụng để lưu trữ nhiều giá trị trong một biến duy nhất, thay vì tạo các biến riêng biệt cho từng giá trị. Số phần tử của mảng là 1 số cố định nên sau khi đã khai báo mảng ta không thể thêm 1 phần tử mới hay xóa phần tử hiện tại.
Cách khai báo mảng một chiều
Dựa theo định nghĩa về mảng, để khai báo một mảng ta cần có:
- Kiểu dữ liệu của mảng: ví dụ kiểu int, String, boolean, float, double,…
- Số phần tử của mảng
- Tên của mảng
Giả sử ta cần khai báo 1 mảng có kiểu dữ liệu số nguyên, gồm 5 phần tử, có tên là arr, ở Kotlin ta có nhiều cách khai báo:
val arr: Array<Int> = arrayOf()
hoặc
val arr = arrayOf(1, 2, 3, 4 ,5)
Cách này dùng khi ta đã biết mảng đó có chính xác 5 phần tử là: 1, 2, 3, 4, 5
Ví dụ khác: Mảng kiểu chuỗi:
val arr = arrayOf(“a”, “b”, “c”);
Ta có thể xem được số phần tử của mảng bằng cách: arr.size
Cách truy xuất/tham chiếu đến một phần tử của mảng một chiều
Những phần tử được sắp xếp trong mảng được đánh số theo số thứ tự (index).
Phần tử đầu tiên của mảng có index là 0
Phần tử cuối cùng của mảng có index là số phần tử mảng – 1
Với mảng số nguyên {1, 2, 3, 4, 5}, ta có:
arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] =4; arr[4] =5;
Không có phần tử nào có index nhỏ hơn 0 hoặc lớn hơn 4 cả, nếu ta cố tình tham chiếu đến, chương trình sẽ báo lỗi ( ném ra ngoại lệ java.lang.ArrayIndexOutOfBoundsException), lỗi này thường gặp khi chúng ta làm việc với kiểu mảng hay danh sách.
Tổng quát, để tham chiếu đến 1 phần tử thứ i của mảng:
arr[i] với 0 <= i <= arr.length – 1 hoặc (0 <= i < arr.length )
Liệt kê các phần tử của mảng một chiều bằng vòng lặp cơ bản
Bởi vì ta luôn biết số phần tử của mảng rồi nên thường dùng vòng lặp for có index để liệt kê:
for (i in arr.indices) { println(arr[i]) }
( ở đây indices sẽ là viết tắt của ( 0..arr.size-1), i đóng vai trò là index của mảng arr nên 0 <= i < số phần tử của mảng )
Có 1 cách khác sử dụng vòng for để liệt kê phần tử của mảng mà ko sử dụng indices:
for (e in arr) { println(e) }
Tìm giá trị phần tử của mảng một chiều bằng indexOf cơ bản
Hàm indexOf dùng khi bạn muốn tìm phần tử trong mảng. Ví dụ như mảng arr chúng ta đang sử dụng, cần tìm số 4 ở trong mảng đó thì dùng như sau:
val index = arr.indexOf(4) println(index)
hàm này sẽ trả về vị trí của giá trị cần tìm, ở đây vị trí tìm ra là 3. Chúng ta có thể áp dụng hàm này trong tất cả thể loại mảng như là mảng chuỗi, mảng kiểu dữ liệu tự định nghĩa, tìm được hết.
Làm sao để thêm phần tử hoặc xóa phần tử trong mảng
Không được. Bản thân mảng đã được cấp phát vùng nhớ nhất định và bạn không thể tăng vượt quá. Nếu như bạn muốn tăng giảm bạn nên dùng MutableList, hoặc bạn có thể cast array sang mutableList bằng cách sau:
arr.toMutableList()
Dùng cho biết cách dùng thôi chứ thật ra nếu dữ liệu thay đổi bạn nên tính toán define lại biến đó bằng mutableList để khỏi mất công cast.
—
Ví dụ cho vui: Có một căn nhà có 10 cái ghế. Một con chó chạy vào ngồi, ta cho nó ngồi ở ghế số 0. Một con chó cái khác chạy vào, được ngồi ghế số 1. Tương tự nhiều con chó khác có thể chạy vào và ngồi ghế tiếp theo.
Trường hợp 1 (Add): 10 ghế của căn nhà đã đầy, nhưng con chó mới vẫn chạy vào. Lúc này căn nhà không còn đủ chỗ chứa, ta xây căn nhà mới có sức chứa gấp 1,5 lần, để được 15 cái ghế và đem hết chó cũ qua nhà mới ngồi ở ghế mang số của nó, con chó mới đuợc ngồi ghế số tiếp theo.
Trường hợp 2 (Add with index): có một con chó nạp vip, muốn ngồi ghế số 1. Ta xua hết chó từ số 2 xuống 1 ghế, các con chó từ 2 đến cuối lần lượt di chuyển xuống 1 ghế
Trường hợp 3 (remove index): con chó số 4 tè dầm, gia quy nghiêm khắc, phải đuổi ra ngoài. Ta đuổi con chó số 4 ra ngoài, lau ghế và đem con chó số 5 đến cuối lên 1 ghế.
Trường hợp 4 (get at): tìm con chó số 8. Ta đến ghế số 8 và thấy con chó
Trường hợp 5 (indexof): tìm con chó đực màu đen, ta dò tìm từ chó số 0 đến chó cuối. Nếu tìm thấy thì chỉ nó, còn tới cuối mà không thấy thì chỉ -1
No responses yet