Tổng quan về Generic và Non-Generic Collection

Mục tiêu bài học

  • Hiểu khái niệm GenericNon-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#

  1. 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ó.
  2. 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

  1. 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.
  2. 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<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<string, int> studentScores = new Dictionary<string, int>

{

    { "Alice", 90 },

    { "Bob", 85 }

};

Console.WriteLine(studentScores["Alice"]);


Phần 3: Non-Generic Collection

  1. 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.
  2. 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ụ

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ụ

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

  1. 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.
  2. 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.
  3. 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.

Lên trên