Hướng dẫn về C# ArrayList với các ví dụ

⚡ Tóm tắt thông minh

ArrayList trong C# là một tập hợp động từ không gian tên System.Collections, lưu trữ các phần tử dưới dạng đối tượng. Không giống như mảng, nó tự động mở rộng và thu hẹp trong thời gian chạy và có thể chứa các số nguyên, chuỗi và giá trị Boolean cùng nhau trong một danh sách.

  • 🔄 Điều chỉnh kích thước linh hoạt: ArrayList thêm và xóa các phần tử trong quá trình chạy, vì vậy bạn không cần phải xác định trước số lượng phần tử như với mảng.
  • 📦 Lưu trữ đối tượng: Mỗi phần tử được lưu trữ dưới dạng một đối tượng, cho phép một ArrayList chứa nhiều kiểu dữ liệu khác nhau như int, string và bool.
  • Các phương pháp cốt lõi: Các phương thức Add, Insert, Remove, RemoveAt, Contains và Sort bao gồm các thao tác thường ngày trên một ArrayList.
  • 📊 Số lượng và dung tích: Thuộc tính Count trả về số lượng mục hiện tại, trong khi Capacity là dung lượng lưu trữ được phân bổ.
  • Lựa chọn hiện đại: Microsoft Khuyến nghị sử dụng kiểu dữ liệu List chung cho mã mới vì nó bổ sung tính an toàn kiểu dữ liệu khi biên dịch và tránh việc đóng gói (boxing).
  • 🤖 Hỗ trợ AI: GitHub Copilot tạo mã mẫu cho ArrayList, và các pipeline ML.NET truyền dữ liệu thông qua các kiểu dữ liệu tập hợp trong C#.

C# ArrayList

ArrayList trong C# là gì?

Tập hợp ArrayList tương tự như Mảng kiểu dữ liệu trong C#. Sự khác biệt lớn nhất là tính chất động của bộ sưu tập danh sách mảng.

Đối với mảng, bạn cần xác định số phần tử mà mảng có thể chứa tại thời điểm khai báo mảng. Nhưng trong trường hợp bộ sưu tập Danh sách mảng, việc này không cần phải thực hiện trước. Các phần tử có thể được thêm hoặc xóa khỏi bộ sưu tập Danh sách mảng bất kỳ lúc nào. Chúng ta hãy xem xét các hoạt động có sẵn cho bộ sưu tập danh sách mảng một cách chi tiết hơn.

Khai báo danh sách mảng

Việc khai báo một ArrayList được cung cấp dưới đây. Một danh sách mảng được tạo với sự trợ giúp của Kiểu dữ liệu ArrayList. Từ khóa “mới” được sử dụng để tạo một đối tượng của ArrayList. Đối tượng sau đó được gán cho biến a1. Vì vậy, bây giờ biến a1 sẽ được sử dụng để truy cập các phần tử khác nhau của danh sách mảng.

ArrayList a1 = new ArrayList()

Thêm các phần tử vào một mảng

Phương thức add được sử dụng để thêm một phần tử vào ArrayList. Phương thức add có thể được sử dụng để thêm bất kỳ loại phần tử kiểu dữ liệu nào vào danh sách mảng. Vì vậy, bạn có thể thêm Số nguyên hoặc chuỗi hoặc thậm chí giá trị Boolean vào danh sách mảng. Cú pháp chung của phương pháp cộng được đưa ra dưới đây

ArrayList.add(element)

Dưới đây là một số ví dụ về cách sử dụng phương pháp “thêm”. Phương thức add có thể được sử dụng để thêm các kiểu dữ liệu khác nhau vào bộ sưu tập Danh sách mảng.

Dưới đây bạn có thể xem các ví dụ về cách chúng ta có thể thêm Chuỗi số nguyên và thậm chí các giá trị Boolean vào bộ sưu tập Danh sách mảng.

  • a1.add(1) – Điều này sẽ thêm giá trị Số nguyên vào bộ sưu tập
  • a1.add(“Example”) – Điều này sẽ thêm giá trị Chuỗi vào bộ sưu tập
  • a1.add(true) – Điều này sẽ thêm giá trị Boolean vào bộ sưu tập

Bây giờ hãy xem điều này hoạt động ở cấp độ mã. Tất cả mã được đề cập bên dưới sẽ được ghi vào ứng dụng Console của chúng tôi. Mã sẽ được ghi vào tệp Program.cs của chúng tôi.

Trong chương trình dưới đây, chúng ta sẽ viết mã để tạo một danh sách mảng mới. Chúng tôi cũng sẽ hiển thị để thêm các phần tử và hiển thị các phần tử của danh sách Mảng.

Danh sách mảng trong C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1[0]);	  
   Console.WriteLine(a1[1]);
   Console.WriteLine(a1[2]);
   Console.ReadKey();
  }
 }
}

Code Giải trình:-

  1. Bước đầu tiên được sử dụng để khai báo Danh sách mảng của chúng ta. Ở đây chúng ta khai báo a1 như một biến để chứa các phần tử của danh sách mảng.
  2. Sau đó, chúng tôi sử dụng từ khóa add để thêm số 1 , Chuỗi “Ví dụ” và giá trị Boolean 'true' vào danh sách mảng.
  3. Sau đó, chúng tôi sử dụng phương thức Console.WriteLine để hiển thị giá trị của từng thành phần danh sách mảng trên bảng điều khiển. Bạn sẽ nhận thấy rằng giống như mảng, chúng ta có thể truy cập các phần tử thông qua vị trí chỉ mục của chúng. Vì vậy, để truy cập vị trí đầu tiên của Danh sách mảng, chúng tôi sử dụng vị trí chỉ mục [0]. Vân vân và vân vân.

Nếu mã trên được nhập đúng và chương trình được chạy thì kết quả sau sẽ được hiển thị.

Đầu ra:

Danh sách mảng trong C#

Từ kết quả đầu ra, bạn có thể thấy rằng tất cả các phần tử trong danh sách mảng đều được gửi tới bảng điều khiển.

Hãy xem xét thêm một số phương thức có sẵn như một phần của ArrayList.

Đếm

Phương thức này được sử dụng để lấy số lượng phần tử trong bộ sưu tập ArrayList. Dưới đây là cú pháp chung của câu lệnh này.

ArrayList.Count() – Phương thức này sẽ trả về số phần tử có trong danh sách mảng.

Thông tin

Phương thức này được sử dụng để xem liệu một phần tử có trong bộ sưu tập ArrayList hay không. Dưới đây là cú pháp chung của câu lệnh này

ArrayList.Contains(element) – Phương thức này sẽ trả về true nếu phần tử có trong danh sách, nếu không nó sẽ trả về false.

XóaTại

Phương thức này được sử dụng để xóa một phần tử tại một vị trí cụ thể trong bộ sưu tập ArrayList. Dưới đây là cú pháp chung của câu lệnh này

ArrayList.RemoveAt(index) – Phương thức này sẽ xóa một phần tử khỏi một vị trí cụ thể của Danh sách mảng.

Bây giờ hãy xem điều này hoạt động ở cấp độ mã. Tất cả mã được đề cập bên dưới sẽ được ghi vào ứng dụng Console của chúng tôi. Mã sẽ được ghi vào tệp Program.cs của chúng tôi.

Trong chương trình bên dưới, chúng ta sẽ viết mã để xem cách chúng ta có thể sử dụng các phương pháp nêu trên.

Danh sách mảng trong C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add(1);
   a1.Add("Example");
   a1.Add(true);
   
   Console.WriteLine(a1.Count);
   Console.WriteLine(a1.Contains(2));
   Console.WriteLine(a1[1]);
   a1.RemoveAt(1);
   Console.WriteLine(a1[1]);
   Console.ReadKey();
  }
 }
}

Code Giải trình:-

  1. Vì vậy, thuộc tính đầu tiên chúng ta thấy là thuộc tính Count. Chúng ta lấy thuộc tính Count của danh sách mảng a1 rồi ghi nó vào Console.
  2. Trong phần thứ hai, chúng ta sử dụng phương thức Chứa để xem liệu ArrayList a1 có chứa phần tử 2 hay không. Sau đó, chúng ta ghi kết quả vào Console thông qua lệnh Writeline.
  3. Cuối cùng, để giới thiệu phương pháp Xóa phần tử, chúng tôi thực hiện các bước bên dưới,
    1. Đầu tiên chúng ta ghi giá trị của phần tử tại vị trí Index 1 của danh sách mảng vào console.
    2. Sau đó chúng ta loại bỏ phần tử tại vị trí Index 1 của danh sách mảng.
    3. Cuối cùng, chúng ta lại ghi giá trị của phần tử tại vị trí Index 1 của danh sách mảng vào bàn điều khiển. Tập hợp các bước này sẽ đưa ra một ý tưởng hợp lý liệu phương pháp loại bỏ có hoạt động như bình thường hay không.

Nếu mã trên được nhập đúng và chương trình được chạy thì kết quả sau sẽ được hiển thị.

Đầu ra:

Danh sách mảng trong C#

Tại sao giá trị cuối cùng là đúng?

Nếu bạn thấy chuỗi sự kiện, phần tử Ví dụ sẽ bị xóa khỏi mảng vì đây là vị trí 1. Vị trí 1 của mảng sau đó sẽ được thay thế bằng vị trí 2 trước đó có giá trị 'true'

Cách lặp qua một ArrayList trong C#

Việc đọc từng phần tử của một ArrayList là một tác vụ phổ biến. Vì ArrayList lưu trữ các phần tử dưới dạng đối tượng, bạn có thể duyệt qua chúng bằng vòng lặp foreach hoặc bằng vòng lặp for sử dụng thuộc tính Count. Vòng lặp foreach là cách đơn giản nhất, vì nó duyệt qua từng phần tử theo thứ tự mà không cần chỉ mục.

Ví dụ dưới đây tạo một ArrayList chứa các chuỗi và in từng giá trị trên một dòng riêng biệt. Đoạn mã được viết trong tệp Program.cs của một ứng dụng Console.

Bước 1) Nhập không gian tên System.Collections và tạo một ArrayList với ba phần tử.

Bước 2) Sử dụng vòng lặp foreach để đọc từng phần tử dưới dạng đối tượng và ghi nó ra bảng điều khiển.

using System;
using System.Collections;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   ArrayList a1 = new ArrayList();
   a1.Add("Java");
   a1.Add("Python");
   a1.Add("Kotlin");
   foreach (object item in a1)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

Code Giải trình:-

  1. Không gian tên System.Collections được nhập khẩu để kiểu dữ liệu ArrayList có sẵn cho chương trình.
  2. Ba giá trị chuỗi được thêm vào ArrayList bằng phương thức Add.
  3. Vòng lặp foreach đọc từng mục như một đối tượng, và phương thức Console.WriteLine sẽ in nó ra trên một dòng mới.

Khi chương trình chạy, nó sẽ in ra Java, PythonKotlin trên các dòng riêng biệt. Một vòng lặp for với thuộc tính Count sẽ cho kết quả tương tự đồng thời cho phép bạn sử dụng vị trí chỉ mục của từng phần tử.

Các phương thức và thuộc tính của ArrayList trong C#

Lớp ArrayList cung cấp nhiều phương thức và thuộc tính tích hợp sẵn để quản lý các phần tử của nó. Ngoài việc thêm và xóa các phần tử, nó còn có thể sắp xếp, tìm kiếm và đảo ngược tập hợp. Các thành viên phổ biến nhất được liệt kê bên dưới.

Thành viên Mô tả Chi tiết
Thêm Thêm một phần tử vào cuối danh sách mảng (ArrayList).
Chèn Thêm một phần tử vào vị trí chỉ mục cụ thể.
Hủy bỏ Xóa lần xuất hiện đầu tiên của một phần tử cụ thể.
XóaTại Xóa phần tử tại vị trí chỉ mục được chỉ định.
Trong sáng Xóa tất cả các phần tử khỏi ArrayList.
Sắp xếp Sắp xếp các phần tử theo thứ tự tăng dần.
Reverse Reverselà thứ tự của các phần tử trong danh sách.
Thông tin Trả về true nếu phần tử được chỉ định tồn tại trong danh sách.
chỉ mục của Trả về vị trí chỉ mục của một phần tử nhất định.
Đếm Thuộc tính trả về số lượng phần tử được lưu trữ.
Sức chứa Thuộc tính trả về số lượng phần tử mà danh sách có thể chứa.

Các thành viên này cho phép bạn thêm, tìm kiếm, sắp xếp và xóa các mục mà không cần tự viết logic, đây là một trong những ưu điểm chính của việc sử dụng tập hợp so với mảng thông thường.

Sự khác biệt giữa ArrayList và List trong C#

Cả ArrayList và kiểu dữ liệu chung Danh sách Chúng lưu trữ một nhóm các mục có thể tăng lên trong quá trình thực thi, nhưng lại khác nhau về cách xử lý các kiểu dữ liệu. Hiểu được sự khác biệt này sẽ giúp bạn chọn đúng loại phù hợp cho mã C# hiện đại.

Những điểm khác biệt chính được liệt kê dưới đây:

  • Loại an toàn: ArrayList lưu trữ mọi phần tử dưới dạng đối tượng, trong khi List được ràng buộc với một kiểu dữ liệu đã khai báo và được kiểm tra tại thời điểm biên dịch.
  • Hiệu suất: ArrayList thực hiện việc đóng gói và giải nén các kiểu dữ liệu như int, điều này tốn thời gian, trong khi List tránh việc đóng gói để có tốc độ tốt hơn.
  • Không gian tên: ArrayList nằm trong System.Collections, trong khi List nằm trong System.Collections.Generic.
  • đúc: Việc đọc dữ liệu từ một ArrayList thường cần phải ép kiểu trở lại kiểu dữ liệu ban đầu, nhưng một List trả về kiểu dữ liệu chính xác trực tiếp.
  • Khuyến nghị: Microsoft Khuyến nghị sử dụng List cho các dự án phát triển mới vì nó an toàn hơn, nhanh hơn và dễ đọc hơn.

Tóm lại, ArrayList hữu ích để hiểu mã nguồn cũ hoặc lưu trữ dữ liệu hỗn hợp, trong khi List là lựa chọn ưu tiên cho hầu hết các ứng dụng hiện nay.

Câu Hỏi Thường Gặp

Mảng (Array) có kích thước cố định và lưu trữ một kiểu dữ liệu duy nhất được thiết lập khi khai báo. ArrayList (danh sách mảng) tự động mở rộng và thu hẹp trong quá trình thực thi, lưu trữ mỗi phần tử dưới dạng đối tượng, do đó nó có thể chứa nhiều kiểu dữ liệu khác nhau trong cùng một danh sách.

ArrayList không bị xóa, nhưng Microsoft Không nên sử dụng nó cho việc phát triển mới. Lớp List chung trong System.Collections.Generic được ưu tiên hơn vì nó bổ sung tính an toàn kiểu dữ liệu và hiệu suất tốt hơn, do đó hầu hết mã C# hiện đại đều sử dụng List thay thế.

Vì ArrayList lưu trữ các phần tử dưới dạng đối tượng, việc thêm một kiểu giá trị như int sẽ gói nó trong một đối tượng, đó gọi là đóng gói (boxing). Việc đọc lại và ép kiểu về kiểu ban đầu gọi là giải đóng gói (unboxing). Cả hai bước đều tốn tài nguyên hiệu năng, điều mà List tránh được.

Một ArrayList hỗ trợ nhiều người đọc cùng lúc, nhưng các thành viên của đối tượng không được đảm bảo an toàn đa luồng khi tập hợp được sửa đổi. Để ghi dữ liệu an toàn trong môi trường đa luồng, hãy bọc nó bằng ArrayList.SyncPhương pháp đồng bộ hoặc sử dụng tập hợp đồng thời thay thế.

Count là số lượng phần tử hiện đang được lưu trữ trong ArrayList. Capacity là tổng số phần tử mà nó có thể chứa trước khi thay đổi kích thước. Capacity luôn bằng hoặc lớn hơn Count và tự động tăng lên khi bạn thêm các phần tử.

Bạn có thể sao chép các mục vào một List có kiểu dữ liệu xác thực bằng các phương thức Cast và ToList, hoặc gọi phương thức ToArray để nhận được một mảng đối tượng. Việc chuyển đổi sang một List chung chung là phổ biến vì nó khôi phục tính an toàn kiểu dữ liệu.

Đúng vậy. GitHub Copilot có thể viết khai báo ArrayList, thêm và xóa các lệnh gọi, cũng như vòng lặp từ một đoạn chú thích ngắn hoặc tên phương thức. Nó thường đề xuất cả phiên bản List chung, vì đó là kiểu dữ liệu được khuyến nghị cho mã C# mới.

ML.NET thường đọc dữ liệu huấn luyện thông qua các tập hợp chung như List và IEnumerable, được ánh xạ tới pipeline IDataView của nó. Một ArrayList không phải là kiểu dữ liệu chung hiếm khi được sử dụng trực tiếp vì một tập hợp có kiểu dữ liệu rõ ràng giúp dữ liệu máy học được bảo mật và an toàn về mặt kiểu dữ liệu.

Tóm tắt bài viết này với: