Contents
1. Khái niệm về Collection và List
Collection
- Collection trong C# là các cấu trúc dữ liệu dùng để lưu trữ và quản lý tập hợp các đối tượng.
- Collection cung cấp các phương pháp linh hoạt để thêm, xóa, duyệt và sắp xếp dữ liệu.
- Một số loại collection phổ biến trong C#:
List<T>
: Danh sách kiểu dữ liệu tổng quát.Dictionary<TKey, TValue>
: Bảng ánh xạ giữa khóa và giá trị.Queue<T>
: Hàng đợi.Stack<T>
: Ngăn xếp.LinkedList<T>
: Danh sách liên kết.HashSet<T>
: Bộ tập hợp.
List
List<T>
là một trong những collection phổ biến nhất, đại diện cho một danh sách động lưu trữ các phần tử kiểu dữ liệu tổng quátT
.- Nó nằm trong namespace
System.Collections.Generic
và hỗ trợ các thao tác thêm, xóa, tìm kiếm, và sắp xếp phần tử.
2. Cách khởi tạo List<T>
Cách khởi tạo cơ bản:
- Sử dụng từ khóa
new
để khởi tạo một danh sách trống:
List<int> numbers = new List<int>();
Khởi tạo với các phần tử ban đầu:
- Truyền tập hợp các phần tử vào constructor:
List<int> numbers = new List<int> { 1, 2, 3 };
3. Các phương thức thao tác trên List
1. Phương thức Add
- Chức năng: Thêm một phần tử vào cuối danh sách.
- Ví dụ:
List<int> numbers = new List<int>();
numbers.Add(10); // Thêm phần tử 10
Console.WriteLine(string.Join(", ", numbers)); // Output: 10
2. Phương thức AddRange
- Chức năng: Thêm một tập hợp các phần tử vào cuối danh sách.
- Ví dụ:
List<int> numbers = new List<int> { 1, 2 };
int[] moreNumbers = { 3, 4, 5 };
numbers.AddRange(moreNumbers); // Thêm các phần tử từ mảng
Console.WriteLine(string.Join(", ", numbers)); // Output: 1, 2, 3, 4, 5
3. Phương thức Insert
- Chức năng: Chèn một phần tử vào vị trí chỉ định trong danh sách.
- Ví dụ:
List<int> numbers = new List<int> { 1, 2 };
int[] moreNumbers = { 3, 4, 5 };
numbers.AddRange(moreNumbers); // Thêm các phần tử từ mảng
Console.WriteLine(string.Join(", ", numbers)); // Output: 1, 2, 3, 4, 5
4. Phương thức Remove
- Chức năng: Xóa phần tử đầu tiên có giá trị khớp với giá trị được chỉ định.
- Ví dụ:
List<int> numbers = new List<int> { 1, 2, 3, 4 };
numbers.Remove(3); // Xóa phần tử 3
Console.WriteLine(string.Join(", ", numbers)); // Output: 1, 2, 4
5. Phương thức RemoveAt
- Chức năng: Xóa phần tử tại vị trí chỉ định.
- Ví dụ:
List<int> numbers = new List<int> { 1, 2, 3, 4 };
numbers.RemoveAt(2); // Xóa phần tử tại vị trí 2
Console.WriteLine(string.Join(", ", numbers)); // Output: 1, 2, 4
6. Phương thức Clear
- Chức năng: Xóa tất cả các phần tử trong danh sách.
- Ví dụ:
List<int> numbers = new List<int> { 1, 2, 3 };
numbers.Clear(); // Xóa toàn bộ danh sách
Console.WriteLine(numbers.Count); // Output: 0
7. Phương thức Contains
- Chức năng: Kiểm tra xem danh sách có chứa phần tử được chỉ định hay không.
- Ví dụ:
List<int> numbers = new List<int> { 1, 2, 3 };
bool containsTwo = numbers.Contains(2); // Kiểm tra phần tử 2
Console.WriteLine(containsTwo); // Output: True
8. Phương thức IndexOf
- Chức năng: Trả về chỉ số của phần tử đầu tiên có giá trị được chỉ định.
- Ví dụ:
List<int> numbers = new List<int> { 1, 2, 3, 2 };
int index = numbers.IndexOf(2); // Lấy chỉ số của phần tử 2
Console.WriteLine(index); // Output: 1
9. Phương thức Sort
- Chức năng: Sắp xếp các phần tử trong danh sách theo thứ tự tăng dần.
- Ví dụ:
List<int> numbers = new List<int> { 4, 1, 3, 2 };
numbers.Sort(); // Sắp xếp danh sách
Console.WriteLine(string.Join(", ", numbers)); // Output: 1, 2, 3, 4
4. Các đặc điểm quan trọng của List<T>
- Kích thước động:
List<T>
tự động mở rộng hoặc thu hẹp kích thước khi thêm hoặc xóa phần tử. - Chỉ mục: Các phần tử trong danh sách có thể được truy cập thông qua chỉ số (0-based index).
List<int> numbers = new List<int> { 10, 20, 30 };
Console.WriteLine(numbers[1]); // Output: 20
5. So sánh List<T>
với các Collection khác
Tính năng | List<T> | Array | Dictionary<TKey, TValue> |
---|---|---|---|
Kích thước | Linh hoạt | Cố định | Linh hoạt |
Truy cập phần tử | Qua chỉ số | Qua chỉ số | Qua khóa |
Sắp xếp | Có phương thức hỗ trợ | Không hỗ trợ trực tiếp | Không hỗ trợ trực tiếp |
Chứa khóa | Không | Không | Có |
6. Lời kết
List<T>
là một công cụ mạnh mẽ, cung cấp các phương thức tiện lợi để quản lý danh sách các đối tượng.- Nó phù hợp khi cần thao tác với danh sách động và truy cập phần tử bằng chỉ số.
- Trong các tình huống cụ thể, bạn có thể cân nhắc sử dụng các loại collection khác như
Dictionary<TKey, TValue>
hoặcQueue<T>
để đạt hiệu quả cao nhất.