C# - C Sharp: ArrayList

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
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:

ArrayList Tên_arraylist = new ArrayList();

Đoạn mã sau tạo một thể hiện của ArrayList có tên là arr:

ArrayList arr = new ArrayList();

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:

Tên_arraylist.Add(phần_tử);

Đ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:

using System;
using System.Collections;
class Student
{
  public string fullname;
}
class Demo
{
  static void Main(string[] args)
  {
    ArrayList arr = new ArrayList();
    arr.Add(123); //thêm số 123 vào mảng
    arr.Add("123"); //thêm chuỗi "123" vào mảng
    arr.Add(true); //thêm giá trị true (kiểu bool) vào mảng
    arr.Add(null); //thêm giá trị null vào mảng
    Student st = new Student(); //tạo đối tượng st của lớp Student
    st.fullname = "ABCD";
    arr.Add(st); //rồi thêm vào mảng
    arr.Add(null); //thêm một giá trị null nữa vào mảng
  }
}

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ụ:

arr.Remove(null); //xóa phần tử null
arr.Remove(st); //xóa phần tử st
arr.Remove("123"); //xóa phần tử "123"

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:

Tên_arraylist.Insert( chỉ_số, phần_tử );

Đ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.

if (arr.Contains(null))
{
  Console.WriteLine("Mang co chua gia tri null");
}
else
{
  Console.WriteLine("Mang khong chua null");
}

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:

Tên_arraylist.IndexOf(Đối_tượng);

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:

Console.WriteLine(arr.IndexOf("XYZ")); //tìm thấy => trả về chỉ số tương ứng, ngược lại trả về -1

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(1);
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(2);
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ụ:

arr.Clear(); //xóa tất cả các phần tử khỏi mảng arr

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ụ:

if(arr.IsFixedSize)
  Console.WriteLine("Co dinh");
else
  Console.WriteLine("Khong co dinh");

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ụ:

if (arr.IsReadOnly)
  
Console.WriteLine("Mang da thiet lap che do ReadOnly");
else
  Console.WriteLine("Mang khong thiet lap che do ReadOnly");
» Tiếp: Hashtable
« Trước: Collection
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!