当前位置: 首页 > news >正文

C# 中 Hashtable 学习笔记

1. 基础概念与用法

1.1 什么是 Hashtable?

Hashtable(哈希表) 是 C# 中一种键值对(Key-Value)集合,用于通过唯一的键(Key) 快速查找对应的值(Value)。

  • 键(Key)不能为 null,值(Value)可以为 null
  • 内部基于哈希算法实现,查找效率高。
  • 属于 System.Collections 命名空间(非泛型集合)。
  • 注意:在现代 C# 开发中,更推荐使用泛型版本 Dictionary<TKey, TValue>,但理解 Hashtable 有助于学习集合演进历史和底层原理。

1.2 常用方法与属性

方法/属性 说明
Add(key, value) 添加一个键值对(键不能重复)
Remove(key) 根据键删除对应项
ContainsKey(key) 判断是否包含指定键
ContainsValue(value) 判断是否包含指定值(效率较低)
Keys 获取所有键的集合
Values 获取所有值的集合
Count 获取元素个数

1.3 简单示例

using System;
using System.Collections;class Program
{static void Main(){// 创建 HashtableHashtable ht = new Hashtable();// 添加键值对ht.Add("name", "小明");ht.Add("age", 20);ht.Add("city", "北京");// 访问值(需强制类型转换)string name = (string)ht["name"];int age = (int)ht["age"];Console.WriteLine($"姓名:{name},年龄:{age}");// 遍历 Hashtableforeach (DictionaryEntry entry in ht){Console.WriteLine($"{entry.Key}: {entry.Value}");}}
}

⚠️ 注意:由于 Hashtable 是非泛型集合,存储的是 object 类型,取出时必须显式转换类型,容易出错。


2. 进阶知识点

2.1 Hashtable vs Dictionary<TKey, TValue>

特性 Hashtable Dictionary<TKey, TValue>
类型安全 ❌(存储 object) ✅(编译时检查类型)
性能 稍慢(需装箱/拆箱) 更快(无装箱拆箱)
泛型支持
线程安全 ✅(部分方法) ❌(默认不安全)
推荐使用 旧项目或特殊需求 现代开发首选

💡 建议:除非维护老代码,否则优先使用 Dictionary

2.2 性能特点

  • 查找、插入、删除的平均时间复杂度为 O(1) (常数时间),非常高效。
  • 但当哈希冲突严重或负载因子过高时,性能会下降。
  • 装箱/拆箱开销:因为存储的是 object,值类型(如 int)会被装箱,取出时拆箱,影响性能。

2.3 线程安全性

  • Hashtable 的部分方法是线程安全的

    • 多个读操作可以并发进行。
    • 读写操作不能同时进行。
  • 可通过 Hashtable.Synchronized(new Hashtable()) 创建线程安全包装器。

  • 但现代开发中更推荐使用 ConcurrentDictionary<TKey, TValue>(来自 System.Collections.Concurrent)处理并发场景。


3. 实际工作中的使用场景

虽然 Hashtable 已逐渐被 Dictionary 取代,但在某些场景仍有价值:

3.1 适合使用 Hashtable(或 Dictionary)的业务场景

  1. 缓存配置信息
    比如:将数据库中的“国家代码 → 国家名称”映射加载到内存,快速查询。

    ht.Add("CN", "中国");
    ht.Add("US", "美国");
    
  2. 用户会话管理(旧式 Web 应用)
    在 ASP.NET Web Forms 中,Session 底层曾使用类似 Hashtable 的结构存储用户数据。

  3. 动态属性存储
    当对象属性不确定时,可用 Hashtable 临时存储键值对(如解析 JSON 前的中间结构)。

  4. 去重与快速查找
    利用键的唯一性,避免重复数据(如记录已处理的订单ID)。

🚫 不适合的场景

  • 需要强类型安全的项目(用 Dictionary)。
  • 高并发写入场景(用 ConcurrentDictionary)。
  • 需要保持插入顺序(Hashtable 不保证顺序,可用 OrderedDictionaryDictionary + List)。

总结

项目 说明
优点 查找快、支持任意类型键值、部分线程安全
缺点 非泛型、需类型转换、性能不如 Dictionary、不保证顺序
学习建议 理解原理即可,实际开发优先使用 Dictionary<TKey, TValue>

🌟 一句话记住
Hashtable 是“老式键值对容器”,快但不安全;Dictionary 是“现代升级版”,快又安全!

http://www.jsqmd.com/news/27339/

相关文章:

  • 清理祖传 AK 不怕炸锅:基于 UModel 的云监控 2.0 身份凭证观测实践
  • Ubuntu笔记本盖上不休眠
  • 背包问题千千结:遍历顺序、内外循环,我们该如何思考?
  • 2025年GEO搜索企业权威推荐榜单:GEO广告/GEO排名/大模型GEO源头企业精选
  • 2025年10月遗产继承律师推荐榜:五强对比与专业评测
  • 2025年河北关键词排名查询机构权威推荐榜单:seo关键词排名优化/关键词seo排名 /关键词优化排名源头机构精选
  • 2025年防爆正压柜厂家权威推荐榜单:防爆控制柜/粉尘防爆柜/防爆正压型小屋源头厂家精选
  • CANape的CASL工具箱
  • 2025年10月25+抗老精华产品口碑榜:五款高回购单品对比评测
  • Python 基本语法
  • 基础算法(四)堆排序
  • 第6章:工作流 (Workflow):编排复杂的业务逻辑 - 教程
  • 2025年皮带称厂家权威推荐榜单:装载机秤/螺旋秤/定量给料机源头厂家精选
  • 2025年led全彩显示屏制造商权威推荐榜单:led数字显示屏/工业显示屏/led异形显示屏源头厂家精选
  • 全新升级!山海鲸4.6.3版本正式亮相
  • 2025年中国玻璃钢管道厂家排名:高性价比玻璃钢管道厂家深度测评
  • 刚刚 Cursor2.0炸裂发布!这3大亮点必学
  • 2025年10月中型挖掘机品牌推荐:五强综合榜对比排行
  • AT_arc195_d [ARC195D] Swap and Erase
  • ubuntu24.04本地部署stable-diffusion-v1.5
  • 线段树题解
  • 单目相机Matlab参数标定
  • 2025年10月大型挖掘机品牌实力榜:外资在华累计销量与口碑数据公开
  • 2025年10月挖掘机厂家评测榜:五强国四排放对比排行
  • 2025年10月小型挖掘机品牌推荐榜:五强评测对比解析
  • 2025年10月挖掘机品牌推荐榜:迪万伦领衔全品类对比评测
  • Nginx作用以及应用场景
  • 2025年10月中型挖掘机租赁品牌对比榜:性能与服务综合排名
  • 2025年10月挖掘机厂家对比榜:迪万伦高寒施工机型与主流厂家排行
  • 2025年10月中型挖掘机租赁品牌榜:高原施工场景下的五强对比与选择