Giới thiệu về lớp Array và Collection
Giới thiệu về Collection
Ở những bài đầu chúng ta đã tìm hiểu khái niệm mảng trong quá trình lưu trữ dữ liệu. Tuy nhiên, mảng có 1 vấn đề hạn chế rất lớn là mảng chỉ lưu trữ các phần tử với số lượng cố định (được khai báo ngay từ lúc khởi tạo). Điều này, sẽ không phù hợp với các ứng dụng C# muốn quản lý các danh sách dữ liệu với số lượng lớn cũng như có thể thay đổi số lượng phần tử trong danh sách. Chính bởi vậy, trong Java, người ta đã tạo ra các phần tử collection để nhằm giải quyết vấn đề này.
Một collection đơn giản là 1 đối tượng có thể nhóm nhiều phần tử thành 1 khối duy nhất. Collection được sử dụng để lưu trữ, lấy, thao tác và truyền dữ liệu tổng hợp. Thông thường, chúng lưu các phần tử dữ liệu theo từng nhóm tự nhiên, ví dụ như danh sách khách hàng, nhóm các thư điện tử, tập hợp sinh viên,…
Thông thường, trong 1 ứng dụng chúng ta sẽ gặp rất nhiều tình huống phải xử lý collection. Chính vì vậy, các ngôn ngữ lập trình bậc cao sẽ tạo sẵn các Collections Framework để lập trình viên có thể dùng luôn mà không phải mất thời gian tự tạo các lớp collection. Vậy, thực sự Collections Framework là gì? Ta có thể hiểu nôm na là “Collections Framework là 1 kiến trúc thống nhất để đại diện và thao tác các collection”. Cụ thể, Collections Framework chứa các thành phần sau:
- Các interface: Đây là các kiểu dữ liệu trừu tượng đại diện cho các đối tượng collection. Các interface này định nghĩa các hành động chung đại diện cho các nhóm collection khác nhau. Ví dụ như Collection, List,…
- Các lớp triển khai: Đây là các lớp triển khai cụ thể của các collection interface. Về bản chất, chúng là các cấu trúc dữ liệu tái sử dụng.
- Thuật toán: Đây là những phương thức được xây dựng sẵn nhằm thể hiện các tính toán hữu ích, ví dụ như tìm kiếm và sắp xếp, trên các đối tượng mà các collection đang lưu trữ. Về bản chất, thuật toán là những chức năng tái sử dụng.
C# Collections Framework
Các lớp Collection là các lớp đặc biệt để lưu giữ và thu hồi dữ liệu. Những lớp này cung cấp sự hỗ trợ cho Stack, Queue, List, và Hash Table. Đa số các lớp Collection trong C# triển khai cùng các Interface.
Trong C#, các lớp Collection phục vụ các mục đích đa dạng, chẳng hạn như cấp phát bộ nhớ động cho các phần tử và truy cập một danh sách các item dựa trên một chỉ mục,… Những lớp này tạo tập hợp các đối tượng của lớp Object, mà là lớp cơ sở cho tất cả kiểu dữ liệu trong C#.
Ghi chú: Stack: ngăn xếp, push: thêm nút mới vào đỉnh stack, pop: thao tác lấy 1 phần tử từ đỉnh stack
Các lớp Collection trong C#
The following are the various commonly used classes of the System.Collection namespace. Click the following links to check their detail.
STT | MÔ TẢ CÁCH SỬ DỤNG |
---|---|
1 | ArrayList
ArrayList biểu diễn một tập hợp được sắp xếp của một đối tượng mà có thể được lập chỉ mục cho từng item riêng rẽ. Về cơ bản, nó là một sự thay thế cho một mảng. Tuy nhiên, không giống như trong mảng, bạn có thể thêm và gỡ bỏ các item từ một list tại một vị trí đã xác định bởi sử dụng một chỉ mục và mảng chính nó có thể tự điều chỉnh kích cỡ một cách tự động. Nó cũng cho phép cấp phát bộ nhớ động, thêm, tìm kiếm và sắp xếp các item trong một list. |
2 | Hashtable
Hashtable sử dụng một cặp key-value để truy cập các phần tử trong collection này. Một Hash Table được sử dụng khi bạn cần truy cập các phần tử bởi sử dụng key, và bạn có thể nhận diện một giá trị key hữu ích. Mỗi item trong Hash Table có một cặp key/value. Key được sử dụng để truy cập các item trong dạng collection này. |
3 | SortedList
SortedList sử dụng một key cũng như một index để truy cập các item trong một list. Một danh sách đã được sắp xếp là sự tổ hợp của một mảng và một Hash Table. Nó chứa một danh sách các item mà có thể được truy cập bởi sử dụng một key hoặc một chỉ mục. Nếu bạn truy cập item bởi sử dụng một chỉ mục, nó là một ArrayList, và nếu bạn truy cập item bởi sử dụng key, nó là một HashTable. Tập hợp các item luôn luôn được sắp xếp bởi giá trị key |
4 | Stack
Stack biểu diễn một tập hợp Last-in, First-out của các đối tượng. Nó được sử dụng khi bạn cần truy cập các item theo dạng Last-in, First-out. Khi bạn thêm một item vào trong danh sách, nó được gọi là pushing và khi bạn gỡ bỏ một item, nó được gọi là popping. |
5 | Queue
Queue biểu diễn một tập hợp First-in, First-out của các đối tượng. Nó được sử dụng khi bạn cần truy cập các item theo dạng First-in, First-out. Khi bạn thêm một item vào trong danh sách, nó được gọi là enqueue và khi bạn gỡ bỏ một item, nó được gọi là deque. |
6 | BitArray
BitArray biểu diễn một mảng ở dạng biểu diễn nhị phân bởi sử dụng các giá trị 1 và 0. Nó được sử dụng khi bạn cần lưu giữ các Bit nhưng không biết trước số lượng Bit. Bạn có thể truy cập các item từ BitArray collection bởi sử dụng một chỉ mục là số nguyên, mà bắt đầu từ 0. |