Tổng quan về Generic và Non-Generic Collection
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.
Bài viết liên quan
Sử dụng kiểu tập hợp (Enum)
Enum (viết tắt của Enumeration) trong C# là một kiểu dữ liệu đặc biệt cho phép bạn định nghĩa một tập hợp các hằng số có tên
Đọc thêmTính đóng gói (Encapsulation) và best practices trong OOP
(Tính đóng gói) là một trong những nguyên tắc cơ bản của lập trình hướng đối tượng (OOP).
Đọc thêmTính trừu tượng - Abstract classes and interfaces
Tính trừu tượng (Abstraction) trong OOP là kỹ thuật ẩn đi các chi tiết triển khai và chỉ hiển thị cho người dùng những chức năng cần thiết.
Đọc thêmTính chất kế thừa (Inheritance) và đa hình (polymorphism)
Kế thừa là cơ chế cho phép một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác.
Đọc thêmCách debug ứng dụng C#
Hướng dẫn cách debug chương trình C# trong Visual Studio và Visual Studio Code
Đọc thêmTìm hiểu về các loại Collection trong C#
Trong C#, collections là các cấu trúc dữ liệu được sử dụng để lưu trữ và quản lý các nhóm đối tượng. C# cung cấp nhiều loại collections khác nhau để phù hợp với các yêu cầu cụ thể của lập trình viên
Đọc thêmSử dụng mảng (Arrays)
Mảng trong C# là một cấu trúc dữ liệu lưu trữ một dãy các phần tử có bộ nhớ nằm liên tiếp nhau và có kích thước cố đinh.
Đọc thêmLập trình hướng đối tượng
Lập trình hướng đối tượng (Object Oriented Programing) hay còn gọi là OOP. Là một kỹ thuật lập trình cho phép các lập trình viên có thể ánh xạ các thực thể bên ngoài đời thực và trừu tượng hoá thành các class và object trong mã nguồn.
Đọc thêmVòng lặp (loop)
Trong thực tế khi bạn cần thực thi một khối lệnh nhiều lần. Vòng lặp cho phép chúng ta thực thi một câu lệnh hoặc một khối lệnh nhiều lần.
Đọc thêmCấu trúc điều khiển Swicth case
C# cung cấp một cấu trúc khác để thực hiện rẽ nhiều nhánh thay cho việc lồng ghép nhiều if-else là cấu trúc switch-case.
Đọc thêm