C#Hashtable哈希表
一、Hashtable 核心介绍(必考)
1. 定义定位
Hashtable 是 .NET 早期非泛型键值对哈希集合
-
属于键值对集合(和 Dictionary 同类)
-
基于哈希算法实现快速查找
-
现已被 Dictionary 完全淘汰替代
2. 底层核心原理(必背)
存入数据时传入 Key 和 Value:
-
通过哈希函数将 Key 转换成数字(哈希码)
-
根据哈希码直接定位内存存储位置
-
实现:按键秒查数据,查询速度极快
3. 致命缺点(为什么被淘汰)
-
类型不安全:Key、Value 全部默认为 object,可以随便混存
-
存在装箱拆箱:存取值类型必定转换,性能差
-
非泛型、写法老旧、项目不再使用
二、Hashtable 完整语法与初始化
无需指定类型,任意 Key、任意 Value 都能存
// 初始化直接批量添加键值对
Hashtable table = new Hashtable()
{
{1,"这是1" },
{true,"这是true1" },
};
三、Hashtable 全套增删改查方法
1. Add() 添加键值对
可以存任意类型:int、bool、数组、对象、字符串
table.Add(0, "这是0");
table.Add(2, new int[] { 1, 2, 3 });
2. Count 获取键值对个数
Console.WriteLine(table.Count);
3. 根据 Key 取值
Console.WriteLine(table[1]);
4. 修改数据
直接通过索引 Key 覆盖赋值
table[1] = 100;
Console.WriteLine(table[1]);
5. 获取所有 Keys / Values
table[1] = 100;
Console.WriteLine(table[1]);
Console.WriteLine(table.Keys); // 获取全部键集合
Console.WriteLine(table.Values); // 获取全部值集合
6. 移除数据
table.Remove(0); // 根据Key移除指定键值对
// table.Clear(); // 清空所有数据
7. 判断 Key 是否存在
Console.WriteLine(table.ContainsKey(0));
8. 遍历 Values
foreach (var item in table.Values)
{
Console.WriteLine(item + "---");
}
四、Hashtable 独有特点
-
无序存储:哈希表不保证存入顺序
-
Key 唯一:不能重复添加相同 Key
-
万物皆可存:不限类型,全部 object
-
查询快、遍历慢:哈希定位查询极佳,遍历性能弱
五、Hashtable VS Dictionary 精准对比(核心)
|
对比维度 |
Hashtable 哈希表 |
Dictionary 字典 |
|---|---|---|
|
版本 |
早期非泛型(老旧) |
泛型集合(现代推荐) |
|
类型安全 |
不安全,任意类型混存 |
安全,固定 Key/Value 类型 |
|
装箱拆箱 |
有,性能低 |
无,性能高 |
|
存储顺序 |
无序 |
有序(存入顺序) |
|
项目使用 |
已淘汰 |
项目百分百使用 |
六、四大集合终极汇总(最全背诵表)
ArrayList / List<T> / Hashtable / Dictionary
|
集合类型 |
结构 |
类型安全 |
装箱拆箱 |
使用场景 |
|---|---|---|---|---|
|
ArrayList |
顺序列表 |
不安全 |
有 |
老旧淘汰 |
|
List<T> |
顺序列表 |
安全 |
无 |
存列表、排序、遍历 |
|
Hashtable |
键值对哈希 |
不安全 |
有 |
老旧淘汰 |
|
Dictionary |
键值对哈希 |
安全 |
无 |
分组、映射、按键查询 |
七、最终口诀(满分背诵)
-
列表存数据用 List,彻底替代 ArrayList
-
分组键值对用 Dictionary,彻底替代 Hashtable
-
带 泛型<T> = 类型安全、无装箱、高性能
-
不带泛型 = 老旧、不安全、装箱、已淘汰
更多推荐

所有评论(0)