Dictionary和HashTable

HashTable

HashTable 表示根据键的哈希代码进行组织的键/值对的集合

  1. HashTable添加数据,都是“键值对”的形式
  2. 键值对均是object类型,键值对中的键就是为了找数据用的,必须提供,不允许重复
  3. HashTable使用键作为寻找的方式,是一种无序的结构,使用hashTable[键],将返回键所对应的值
  4. HashTable的键可以是任意对象,而值可以是任意类型的对象。
使用实例:

定义Hashtable:

Hashtable ht = new Hashtable();
  
添加元素:

ht.Add("name", "John");
ht.Add(1, "value"); 

获取值:

string name = (string)ht["name"];

//在键值对集合中 是根据键去找值的

Console.WriteLine(ht[1]);
Console.WriteLine(ht[2]);
Console.WriteLine(ht[3]);
Console.WriteLine(ht[false]);
Console.WriteLine("==================================");

修改值:

ht["name"] = "Mike";

删除元素:
//ht.Clear(); //移除集合中所有的元素

ht.Remove("name");

查看元素个数:

int count = ht.Count;

遍历输出:

foreach(DictionaryEntry de in ht)
   Console.WriteLine(de.Key + " - " + de.Value);
通过这些示例可以看到,HashTable提供了常用的操作键值对元素的基本方法,比如添加、获取、修改、删除等。它支持对象作为键值,并且是线程安全的。

Dictionary

Dictionary 和 HashTable 类似,可以用于存储和检索键值对数据的数据结构。

Dictionary<TKey,TValue>在尖括号中填入键的类型与值的类型,那么这个集合就变成了一个指定的键值对模型

特点:
使用泛型,键和值的类型可以指定。
键值必须唯一,但值可以重复。
支持快速添加、获取、修改和删除操作。
底层使用哈希表实现,提供快速查找。

定义Dictionary:
Dictionary<int, string> dict = new Dictionary<int, string>();
添加元素:
dict.Add(1, "one");
dict.Add(2, "two");
获取值:
string value = dict[1];
修改值:
dict[1] = "uno";
删除元素:
dict.Remove(2);
检查包含键:
bool contains = dict.ContainsKey(1);
清空字典:
dict.Clear();
迭代输出:
foreach(var kvp in dict)
   Console.WriteLine(kvp.Key + ":" + kvp.Value);  
Dictionary提供了类型安全的键值对存储,支持常见操作,性能高效。广泛使用在数据映射场景。

Dictionary和HashTable差异

  1. 泛型与非泛型
    Dictionary是泛型集合,可以指定键值类型。HashTable是非泛型,键值类型是Object。

  2. 键值重复
    Dictionary键值必须唯一,不允许重复。HashTable键允许重复,但最后一个值会覆盖前面。

  3. 线程安全
    HashTable是线程安全的,内部操作同步处理,性能较差。Dictionary不是线程安全的。

  4. 性能
    Dictionary通过泛型化可以避免 boxing/unboxing,性能比HashTable高。

  5. 键值类型
    Dictionary键值允许null,HashTable键不允许null,值可以null。

  6. 语法
    Dictionary使用键值对<>表示类型,访问使用[key]。HashTable是传统语法。

  7. 新增方法
    Dictionary新增了ContainsKey等便利方法。

总之:
Dictionary适用于需要类型安全且线程不安全(性能优先)的场景。HashTable适用于需要线程安全但类型不限的场景。现在更推荐使用Dictionary,除非明确需要线程安全特性。所以在选择时需要权衡所需功能和性能要求选择合适的集合类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值