C# - C Sharp: ArrayList
Giải phóng thời gian, khai phóng năng lực
Tổng quan
Lớp ArrayList là lớp có kích thước có thể thay đổi tự động theo hướng tăng hoặc hoặc giảm. Không giống như lớp Array, ArrayList có thể lưu trữ các phần tử có kiểu khác nhau.
ArrayList cho phép ta xác định được kích thước của tập hợp ngay trong quá trình thực thi chương trình bằng cách định nghĩa dung lượng (thông qua thuộc tính Capacity) để từ đó xác định số lượng phần tử của danh sách mảng mà nó có thể chứa. Dung lượng mặc định của ArrayList là 16 (mảng có thể chứa 16 phần tử, tức là Capacity = 16); trong trường hợp số lượng phần tử bằng với dung lượng thì dung lượng sẽ tự động được tăng gấp đôi.
ArrayList cho phép ta có thể thêm (thậm chí cả giá trị null), sửa, xóa các phần tử mảng ngay trong khi chương trình còn đang thực thi (run-time). Các phần tử của ArrayList được truy cập thông qua vị trí chỉ số.
Với ArrayList bạn cũng không cần phải quan tâm đến việc quản lý bộ nhớ nữa.
Các phần tử của ArrayList sẽ được đánh chỉ số bắt đầu từ 0.
Cú pháp tạo ArrayList
Để tạo một thể hiện của lớp ArrayList thì điều đầu tiên là bạn cần phải khai báo namespace chứa nó: using System.Collections;.
Sau đó ta mới sử dụng được ArrayList. Cú pháp cụ thể cho việc như sau:
Đoạn mã sau tạo một thể hiện của ArrayList có tên là arr:
Các phương thức của lớp ArrayList
ArrayList có khá nhiều phương thức được xây dựng sẵn, điều này sẽ giúp giảm rất nhiều công sức cho người dùng cũng như giảm được thời gian phát triển ứng dụng. Dưới đây là các phương thức phổ biến của ArrayList.
Add()
Phương thức này dùng để thêm một phần tử vào cuối mảng. Cú pháp của phương thức như sau:
Đoạn mã sau sẽ thêm một số phần tử với các kiểu khác nhau (bao gồm cả giá trị null) vào mảng arr:
Remove()
Phương thức này dùng để xóa phần tử khỏi mảng. Nếu trong trường hợp có hai hay nhiều phần tử giống nhau thì phương thức sẽ xóa phần tử có chỉ số nhỏ nhất khỏi mảng. Ví dụ:
RemoAt()
Phương thức này sẽ xóa phần tử có chỉ số được chỉ ra tương ứng. Đoạn mã sau xóa phần tử có chỉ số 3 khỏi mảng arr:
arr.RemoveAt(3);
Insert()
Phương thức này dùng để thêm mới một phần tử vào vị trí có chỉ số được chỉ ra. Cú pháp của phương thức như sau:
Đoạn mã sau thêm phần tử có giá trị là một chuỗi "XYZ" vào mảng arr tại ví trị có chỉ số là 3:
arr.Insert(3,"XYZ");
Contains()
Phương thức này dùng để kiểm tra một phần tử nào đó có nằm trong danh sách mảng hay không. Nếu tìm thấy sẽ trả về true, ngược lại thì trả về false.
Đoạn mã sau sẽ kiểm tra xem trong mảng arr có chứa phần tử có giá trị là null hay không.
IndexOf()
Phương thức này dùng để lấy chỉ số của phần tử được chỉ ra tương ứng. Trong trường hợp có nhiều phần tử giống nhau thì phương thức sẽ lấy chỉ số nhỏ nhất; trường hợp không có phần tử trong danh sách mảng thì phương thức sẽ trả về giá trị -1. Cú pháp sử dụng của phương thức này như sau:
Ví dụ sau sẽ in ra chỉ số của phần tử có giá trị "XYZ". Trường hợp giá trị in ra là -1 thì tức là phần tử này không tồn tại trong mảng arr:
Reverse()
Phương thức này dùng để đảo ngược trật tự các phần tử của danh sách mảng. Ví dụ:
arr.Add(2);
arr.Add(3);
arr.Add(4); //ban đầu trật tự của các phần tử là 1, 2, 3, 4
arr.Reverse(); //sau khi đảo ngược thì trật tự sẽ là 4, 3, 2, 1
Sort()
Phương thức này dùng để sắp xếp các phần tử mảng theo trật tự tăng dần.
Lưu ý: Bạn chỉ có thể sử dụng phương thức này nếu mảng chứa các phần tử có cùng kiểu và phải là kiểu giá trị chứ không được là kiểu tham chiếu (chẳng hạn bạn tạo hai đối tượng st1 và st2 của lớp Student rồi thêm vào mảng arr, sau đó bạn thực hiện câu lệnh arr.Sort() thì trình dịch sẽ báo lỗi runtime). Ví dụ:
arr.Add(4);
arr.Add(1);
arr.Add(3); //ban đầu trật tự của các phần tử là 2, 4, 1, 3
arr.Sort(); //sau khi sắp xếp thì trật tự sẽ là 1, 2, 3, 4
Clear()
Phương thức này dùng để xóa tất cả các phần tử khỏi mảng. Ví dụ:
Các thuộc tính của ArrayList
Dưới đây là một số thuộc tính cơ bản của lớp ArrayList.
Capacity
Thuộc tính Capacity của ArrayList dùng để thiết lập hoặc lấy số lượng phần tử mà mảng ArrayList có thể chứa. Khi mảng chưa có phần tử nào thì Capacity=0, và giá trị của Capacity sẽ tự động thay đổi theo quy tắc: Capacity là số nhỏ nhất của n*4 (n=0, 1, 2, ...) nhưng phải lớn hơn hoặc bằng kích thước của mảng. Ví dụ, nếu mảng có kích thước là 1 thì Capacity=4, mảng có kích thước là 6 thì Capacity=8, mảng có kích thước là 12 thì Capacity=12, ...
Bạn cũng có thể chủ động thiết lập giá trị của Capacity theo ý muốn; giá trị gán cho Capacity phải lớn hơn hoặc bằng kích thước hiện thời của mảng.
Câu lệnh sau sẽ in ra màn hình Capacity của mảng arr:
Console.WriteLine(arr.Capacity);
Câu lệnh dưới đây sẽ gán giá trị 21 cho Capacity của mảng arr:
arr.Capacity = 21;
Count
Thuộc tính Count dùng để lấy kích thước thực tế của mảng ArrayList. Câu lệnh sau sẽ in ra màn hình kích thước thực tế của mảng arr:
Console.WriteLine("So luong phan tu thuc su ma mang arr dang chua la: " + arr.Count);
IsFixedSize
Thuộc tính này dùng để chỉ ra kích thước của mảng có được đặt cố định hay không. Nếu kích thước được đặt cố định thì giá trị của thuộc tính là true, ngược lại là false. Ví dụ:
IsReadOnly
Thuộc tính này dùng để chỉ ra rằng mảng có thiết lập chế độ read-only hay không, nếu có thì giá trị của thuộc tính là true, ngược lại là false. Ví dụ:
Console.WriteLine("Mang da thiet lap che do ReadOnly");
else
Console.WriteLine("Mang khong thiet lap che do ReadOnly");
Giải phóng thời gian, khai phóng năng lực