Giới thiệu
Hashtable sử dụng indexer [key] để lấy hoặc đặt giá trị liên kết với khóa. Nếu khóa không tồn tại khi get, trả về null; khi set, sẽ thêm mới hoặc cập nhật.
Ví dụ 1: Lấy giá trị theo khóa
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
Hashtable hash = new Hashtable();
hash.Add("1", "AB");
hash.Add("2", "BC");
hash.Add("3", "DE");
hash.Add("4", "EF");
hash.Add("5", "GH");
hash.Add("6", "IJ");
hash.Add("7", "KL");
hash.Add("8", "MN");
hash.Add("9", "OP");
hash.Add("10", "QR");
Console.WriteLine("Value at key 3 = " + hash["3"]);
}
}
Kết quả
Value at key 3 = DE
Ví dụ 2: Cập nhật giá trị theo khóa
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
Hashtable hash = new Hashtable();
hash.Add("1", "AB");
hash.Add("2", "BC");
hash.Add("3", "DE");
hash.Add("4", "EF");
hash.Add("5", "GH");
hash.Add("6", "IJ");
hash.Add("7", "KL");
hash.Add("8", "MN");
hash.Add("9", "OP");
hash.Add("10", "QR");
Console.WriteLine("Value at key 3 = " + hash["3"]);
hash["3"] = "UV";
Console.WriteLine("Value at key 3 (UPDATED) = " + hash["3"]);
}
}
Kết quả
Value at key 3 = DE Value at key 3 (UPDATED) = UV
Lưu ý khi sử dụng Indexer
- Get: Trả về
nullnếu khóa không tồn tại (không ném ngoại lệ) - Set: Tự động thêm mới nếu khóa chưa có, cập nhật nếu đã có
- Khóa không được
null - Giá trị có thể là
null - Không an toàn luồng (thread-safe) mặc định - dùng
Hashtable.Synchronized()nếu cần
So sánh với Dictionary<TKey, TValue>
| Đặc điểm | Hashtable | Dictionary<TKey, TValue> |
|---|---|---|
| Kiểu khóa/giá trị | object | TKey, TValue (generic) |
| Hiệu suất | Boxing/unboxing | Không boxing (kiểu giá trị) |
| Khóa không tồn tại (get) | Trả về null | Ném KeyNotFoundException |
| Thread-safe | Có wrapper Synchronized | Không (dùng ConcurrentDictionary) |