Collection trong C# là gì

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 và cách sử dụng của chúng trong C#

Bảng dưới liệt kê các lớp được sử dụng phổ biến của System.Collection namespace. Bạn truy cập link để tìm hiểu chi tiết.

LớpMiêu tả và Cách sử dụng

ArrayList trong C#

Nó 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.

Hashtable trong C#

Nó 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.

SortedList trong C#

Nó 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

Stack trong C#

Nó 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.

Queue trong C#

Nó 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.

BitArray trong C#

Nó 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.

Collection trong C# là gì

Collection trong C# là gì

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Collection trong C# là gì

Collection trong C# là gì

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Chúng ta đã tìm hiểu về một mảng trong C# ở phần trước. C# cũng có các lớp chuyên biệt chứa nhiều giá trị hoặc đối tượng trong một chuỗi cụ thể, được gọi là collection. Nếu chưa đọc bài viết về mảng trong C# bạn có thể xem ở link dưới đây:

Có hai loại collection được tính hợp sẵn trong C#: non-generic collection (danh sách không định kiểu mạnh) và generic collection (danh sách định kiểu mạnh).

Non-generic collection trong C#

Không gian tên System.Collections có các interface và các lớp cho các non-generic collection. Sơ đồ sau minh họa hệ thống phân cấp của các giao diện và các lớp cho non-generic collection.

Collection trong C# là gì

Như bạn có thể thấy trong sơ đồ trên, IEnumerator, IEnumerable và ICollection là các interface cấp cao nhất cho tất cả các collection trong C#.

IEnumerator: interface IEnumerator hỗ trợ một phương pháp duyệt danh sách đơn giản trên một non-generic collection. Nó bao gồm các phương thức và thuộc tính có thể được thực hiện để hỗ trợ phương pháp duyệt bằng vòng lặp foreach.

IEnumerable: interface IEnumerable gồm phương thức GetEnumerator() trả về một đối tượng của IEnumerator.

Vì vậy, tất cả các lớp collection tích hợp sẵn và các lớp collection do người dùng tự định nghĩa phải triển khai thực hiện các interfaceIEnumerator và IEnumerable để có thể duyệt danh sách bằng cách sử dụng vòng lặp foreach.

ICollection: interface ICollection là interface cơ sở cho tất cả các collection xác định kích thước, liệt kê và phương thức đồng bộ hóa cho tất cả các non-generic collection. Queue và Stack triển khai thực hiện inferface ICollection.

IList: interface IList gồm các thuộc tính và phương thức để thêm, chèn, xóa các phần tử trong collection và cả phần tử riêng lẻ có thể được truy cập theo chỉ mục. ArrayList và BitArray triển khai thực hiện interface IList.

IDictionary: interface IDictionary đại diện cho một non-generic collection có các cặp khóa / giá trị. Hashtable và SortedList triển khai thực hiện interface IDictionary do đó chúng có thể lưu trữ các cặp khóa / giá trị.

Như bạn có thể thấy từ sơ đồ, các non-generic collection như: ArrayList, BitArray, Hashtable, SortedList, Queue và Stack triển khai thực hiện các interface khác nhau do đó chúng được sử dụng cho các mục đích khác nhau.

LớpMiêu tả và Cách sử dụngArrayListArrayList lưu trữ các đối tượng thuộc bất kỳ kiểu dữ liệu nào như một mảng. Tuy nhiên, không cần chỉ định kích thước của ArrayList như với một mảng thông thường vì nó tự động thay đổi kích thước.HashtableHashtable lưu trữ cặp khóa và giá trị. Nó lấy các giá trị bằng cách so sánh giá trị băm của các khóa.SortedListSortedList lưu trữ các cặp khóa và giá trị. Nó tự động sắp xếp các phần tử theo thứ tự tăng dần của khóa theo mặc định.StackStack lưu trữ các giá trị theo kiểu LIFO (Last In First Out - vào sau ra trước). Nó cung cấp phương thức Push() để thêm giá trị và phương thức Pop() và Peek() để truy xuất giá trị từ collection.QueueQueue lưu trữ các giá trị theo kiểu FIFO (First In First Out - vào trước ra trước). Nó giữ thứ tự mà các giá trị đã được thêm vào. Nó cung cấp một phương thức Enqueue() để thêm các giá trị và phương thức Dequeue() để lấy các giá trị từ collection.BitArrayBitArray quản lý một mảng nhỏ các giá trị bit, được biểu diễn dưới dạng Boolean, trong đó true chỉ ra rằng bit đang bật (1) và false chỉ ra bit bị tắt (0).

Generic Collection trong C#

Chúng ta đã tìm hiểu về non-generic collection trong phần trước. Ví dụ: ArrayList, BitArray, SortedList, Queue , Stack và Hashtable.

Hạn chế của non-generic collection là trong khi truy xuất các phần tử, bạn cần ép kiểu dữ liệu phù hợp, nếu không chương trình sẽ đưa ra một ngoại lệ lúc thực thi (runtime). Nó cũng ảnh hưởng đến hiệu suất của hệ thống, vì phải thực hiện boxing và unboxing.

Để khắc phục vấn đề này, C# cung cấp các lớp generic collection trong namespace System.Collections.Generic .

Sau đây là các generic collection được sử dụng rộng rãi:

LớpMô tảListListchứa các thành phần của kiểu dữ liệu được chỉ định. Nó tự động thay đổi kích thước khi bạn thêm các phần tử trong đó.DictionaryDictionarychứa các cặp khóa và giá trị.SortedListSortedListlưu trữ các cặp khóa và giá trị. Nó tự động thêm các phần tử theo thứ tự tăng dần của khóa.HashsetHashsetchứa các phần tử không trùng lặp. Nó loại bỏ các yếu tố trùng lặp.QueueQueuelưu trữ các giá trị theo kiểu FIFO (First In First Out - vào trước ra trước). Nó giữ thứ tự mà các giá trị đã được thêm vào. Nó cung cấp một phương thức Enqueue() để thêm các giá trị và phương thức Dequeue() để lấy các giá trị từ collection.StackStacklưu trữ các giá trị dưới dạng LIFO (Last In First Out - Lần vào trước ra trước). Nó cung cấp phương thức Push() để thêm giá trị và phương thức Pop() và Peek() để truy xuất giá trị từ collection.

Một generic collection nhận được tất cả lợi ích của generic trong C#. Nó không cần phải thực hiện boxing  và unboxing trong khi lưu trữ hoặc lấy các phần tử trong collection. Điều này giúp cái thiện hiệu suất của chương trình.

Chúng ta sẽ tìm hiểu từng loại non-generic collection và generic collection cụ thể trong các bài viết theo. Đầu tiên là ArrayList trong C#: