Danh sách được sử dụng rất nhiều trong quá trình chúng ta lập trình và mảng là kiểu mà chúng ta hay sử dụng nhất. Nhưng đôi khi mảng thông thường không thể đáp ứng được hết nhu cầu sử dụng của chúng ta như kích thước không thể thay đổi chẳng hạn. Vì thế có 2 loại vê cấu trúc dữ liệu mà chúng ta thường dùng để thay thế đó chính là ArrayList và LinkedList. Cả 2 đều giúp chúng ta sử dụng dễ dàng hơn. Nhưng đôi khi chúng ta không biết phải sử dụng cái nào cho hiệu quả. Vậy nên bài blog này sẽ phân tích để giúp mọi người hiểu rõ hơn và tối ưu tốc độ của code hơn nhé. Trước hết, chúng ta cùng phải hiểu ArrayList và LinkedList là gì? Và chúng quản lý các phần tử như thế nào? Bạn cũng có chỉ định sức chứa (Capacity) ngay lúc khởi tạo bằng cách thông qua constructor được hỗ trợ sẵn:
Ngoài ra bạn cũng có thể khởi tạo 1 ArrayList chứa các phần tử được sao chép từ một Collections khác: `/*
Một số thuộc tính và phương thức hỗ trợ sẵn trong ArrayListMột số thuộc tính thông dụng trong ArrayList: TÊN THUỘC TÍNH Ý NGHĨA Count Trả về 1 số nguyên là số phần tử hiện có trong ArrayList. Capacity Trả về 1 số nguyên cho biết số phần tử mà ArrayList có thể chứa (sức chứa). Nếu số phần tử được thêm vào chạm sức chứa này thì hệ thống sẽ tự động tăng lên. Ngoài ra ta có thể gán 1 sức chứa bất kỳ cho ArrayList. Một số phương thức thông dụng trong ArrayList: TÊN PHƯƠNG THỨC Ý NGHĨA Add(object Value) Thêm đối tượng Value vào cuối ArrayList. AddRange(ICollection ListObject) Thêm danh sách phần tử ListObject vào cuối ArrayList. BinarySearch(object Value) Tìm kiếm đối tượng Value trong ArrayList theo thuật toán tìm kiếm nhị phân. Nếu tìm thấy sẽ trả về vị trí của phần tử ngược lại trả về giá trị âm. Lưu ý: là ArrayList phải được sắp xếp trước khi sử dụng hàm. Clear() Xoá tất cả các phần tử trong ArrayList. Clone() Tạo 1 bản sao từ ArrayList hiện tại. Contains(object Value) Kiểm tra đối tượng Value có tồn tại trong ArrayList hay không. GetRange(int StartIndex, int EndIndex) Trả về 1 ArrayList bao gồm các phần tử từ vị trí StartIndex đến EndIndex trong ArrayList ban đầu. IndexOf(object Value) Trả về vị trí đầu tiên xuất hiện đối tượng Value trong ArrayList. Nếu không tìm thấy sẽ trả về -1. Insert(int Index, object Value) Chèn đối tượng Value vào vị trí Index trong ArrayList. InsertRange(int Index, ICollection ListObject) Chèn danh sách phần tử ListObject vào vị trí Index trong ArrayList. LastIndexOf(object Value) Trả về vị trí xuất hiện cuối cùng của đối tượng Value trong ArrayList. Nếu không tìm thấy sẽ trả về -1. Remove(object Value) Xoá đối tượng Value xuất hiện đầu tiên trong ArrayList. Reverse() Đảo ngược tất cả phần tử trong ArrayList. Sort() Sắp xếp các phần tử trong ArrayList theo thứ tự tăng dần. ToArray() Trả về 1 mảng các object chứa các phần tử được sao chép từ ArrayList. Những phương thức trên này cũng khá đơn giản nên mình sẽ không tập trung vào chúng mà để các bạn tự khám phá. Thay vào đó mình sẽ hướng dẫn những thứ hay ho hơn. Ở trên mình có giới thiệu phương thức Sort() sẽ thực hiện sắp xếp danh sách theo thứ tự tăng dần. Vậy nếu danh sách của mình gồm các đối tượng mà mỗi đối tượng là 1 lớp có nhiều thuộc tính thì hàm Sort này biết sắp xếp tăng dần theo thuộc tính nào? Để trả lời câu hỏi này thì chúng ta cần biết thêm là còn 1 hàm Sort nữa được hỗ trợ sẵn trong ArrayList có cú pháp như sau: Sort ( IComparer comparer) Công dụng:
Phương thức này sẽ trả về 3 giá trị:
Từ những quy định về inferface này ta chỉ cần khai báo 1 lớp kế thừa interface IComparer và định nghĩa nội dụng cho phương thức Comparer có giá trị trả về theo những quy định trên. Ví dụBắt tay vào code nào! Đầu tiên ta có 1 lớp Person đại diện cho 1 con người bao gồm 2 thông tin Name và Age.
Tiếp theo ta định nghĩa 1 lớp kế thừa interface ICompare và override lại phương thức Compare trong interface này. Hàm Compare sẽ so sánh dựa trên thuộc tính tuổi tăng dần. ` public class SortPersons : IComparer
Cuối cùng là chương trình chính ta thử tạo 1 ArrayList và thêm 1 vài đối tượng Person vào sau đó gọi hàm Sort() và xem kết quả. `// Tạo 1 danh sách kiểu ArrayList rỗng ArrayList arrPersons = new ArrayList(); // Thêm 3 Person vào danh sách arrPersons.Add(new Person("Nguyen Van A", 18)); arrPersons.Add(new Person("Nguyen Van B", 25)); arrPersons.Add(new Person("Nguyen Van C", 20)); // In thử danh sách Person ban đầu ra. Console.WriteLine("Danh sach Person ban dau: "); foreach (Person item in arrPersons) { }
/*
Kết quả: Danh sách đã được sắp xếp theo tuổi tăng dần. /B02_ArrayList%20trong%20C%23/1_ArrayList%20trong_Howkteam_com.png) Tương tự các hoàn toàn có thể định nghĩa cách so sánh phức tạp hơn như thế nữa… Kết luậnQua bài này chúng ta đã nắm được:
Bài học sau chúng ta sẽ cùng tìm hiểu về HASHTABLE TRONG C#. Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”. Tải xuốngTài liệuNhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học ArrayList trong C# dưới dạng file PDF trong link bên dưới. Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com Đừng quên like và share để ủng hộ Kteam và tác giả nhé! ProjectNếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới! Thảo luậnNếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng. |