Mục tiêu bài học
- Hiểu khái niệm Generic và Non-Generic Collection.
- Phân biệt giữa Generic Collection và Non-Generic Collection.
- Làm quen với các Collection thường dùng trong C# như List<T>, Dictionary<TKey, TValue>, ArrayList, và Hashtable.
- Thực hành sử dụng Generic và Non-Generic Collection để giải quyết bài toán thực tế.
Phần 1: Tổng quan về Collection trong C#
- Collection là gì?
- Collection là các cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý tập hợp các đối tượng.
- Ưu điểm:
- Quản lý dữ liệu linh hoạt hơn mảng.
- Hỗ trợ nhiều phương thức và tính năng sẵn có.
- Phân loại Collection
- Generic Collection: Cho phép làm việc với các kiểu dữ liệu cụ thể. (e.g., List<T>, Dictionary<TKey, TValue>).
- Non-Generic Collection: Làm việc với kiểu dữ liệu không cụ thể, thường là object. (e.g., ArrayList, Hashtable).
Phần 2: Generic Collection
- Tại sao sử dụng Generic Collection?
- Giúp tránh lỗi runtime do kiểu dữ liệu không khớp.
- Cải thiện hiệu suất vì không cần ép kiểu (boxing/unboxing).
- Tăng tính an toàn về kiểu dữ liệu tại compile-time.
- Một số Generic Collection thường dùng
- List<T>:
- Dùng để lưu trữ danh sách các phần tử có thứ tự.
- Hỗ trợ thao tác thêm, xóa, tìm kiếm.
- Ví dụ
- List<T>:
List<int> numbers = new List<int> { 1, 2, 3 };
numbers.Add(4);
Console.WriteLine(string.Join(", ", numbers));
-
- Dictionary<TKey, TValue>:
- Lưu trữ các cặp khóa-giá trị.
- Dễ dàng truy cập giá trị thông qua khóa.
- Ví dụ
- Dictionary<TKey, TValue>:
Dictionary<string, int> studentScores = new Dictionary<string, int>
{
{ "Alice", 90 },
{ "Bob", 85 }
};
Console.WriteLine(studentScores["Alice"]);
Phần 3: Non-Generic Collection
- Hạn chế của Non-Generic Collection
- Không đảm bảo an toàn về kiểu dữ liệu.
- Hiệu suất thấp hơn do cần thực hiện boxing/unboxing.
- Một số Non-Generic Collection thường dùng
- ArrayList:
- Lưu trữ danh sách các phần tử có thứ tự, nhưng không yêu cầu kiểu dữ liệu cụ thể.
- Ví dụ
- ArrayList:
using System.Collections;
ArrayList list = new ArrayList { 1, "Hello", true };
list.Add(3.14);
Console.WriteLine(string.Join(", ", list.Cast<object>()));
-
- Hashtable:
- Lưu trữ các cặp khóa-giá trị, khóa và giá trị đều là kiểu object.
- Ví dụ
- Hashtable:
using System.Collections;
Hashtable table = new Hashtable
{
{ "Alice", 90 },
{ "Bob", 85 }
};
Console.WriteLine(table["Alice"]);
Phần 4: So sánh Generic và Non-Generic Collection
Đặc điểm |
Generic Collection |
Non-Generic Collection |
Kiểu dữ liệu |
Cụ thể (type-safe) |
Không cụ thể (object) |
Hiệu suất |
Cao hơn |
Thấp hơn |
Tính an toàn kiểu |
Đảm bảo |
Không đảm bảo |
Boxing/Unboxing |
Không cần thiết |
Cần boxing/unboxing |
Phần 5: Bài tập thực hành
- Bài tập 1: Sử dụng List<T> để quản lý danh sách sinh viên.
- Tạo một danh sách lưu trữ tên các sinh viên.
- Thêm, xóa, và tìm kiếm tên trong danh sách.
- Bài tập 2: Sử dụng Dictionary<TKey, TValue> để quản lý điểm thi.
- Lưu trữ điểm thi của sinh viên với khóa là tên và giá trị là điểm.
- In danh sách sinh viên có điểm > 8.
- Bài tập 3: So sánh hiệu năng giữa ArrayList và List<T>.
- Tạo 1000 phần tử số nguyên trong ArrayList và List<int>.
- Đo thời gian truy xuất từng phần tử.
Phần 6: Tổng kết
- Generic Collection mang lại hiệu suất và tính an toàn cao hơn so với Non-Generic Collection.
- Nên ưu tiên sử dụng Generic Collection khi làm việc với dữ liệu cụ thể.
- Non-Generic Collection chỉ nên dùng trong các trường hợp đặc biệt, khi không xác định được kiểu dữ liệu từ đầu.
Tác giả: Bạch Ngọc Toàn
Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.