一、哈希表(Hashtable)用法
- 哈希表(HashTable)简述
Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对。
key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。
Hashtable中key-value键值对均为object类型,所以Hashtable可以支持任何类型的key-value键值对. - 什么情况下使用哈希表
(1)某些数据会被高频率查询
(2)数据量大
(3)查询字段包含字符串类型
(4)数据类型不唯一 - 哈希表的使用方法
using System.Collections;
using System.Collections.Generic;
//直接定义一个哈希表
Hashtable aa = new Hashtable
{
{“键1”, 1},
{“键2”, 1},
{“键3”, 1}
};
//添加一个keyvalue键值对:
HashtableObject.Add(key,value);
//移除某个keyvalue键值对:
HashtableObject.Remove(key);
//移除所有元素:
HashtableObject.Clear();
// 判断是否包含特定键key:
HashtableObject.Contains(key);
- 遍历哈希表
遍历哈希表需要用到DictionaryEntry Object
//遍历
for(DictionaryEntry de in ht) //ht为一个Hashtable实例
{
Console.WriteLine(de.Key); //de.Key对应于keyvalue键值对key
Console.WriteLine(de.Value); //de.Key对应于keyvalue键值对value
}
//遍历键
foreach (int key in hashtable.Keys)
{
Console.WriteLine(key);
}
//遍历值
foreach (string value in hashtable.Values)
{
Console.WriteLine(value);
}
二、哈希表(Hashtable)和字典(Dictionary)的比较
1.添加数据时Hashtable快。频繁调用数据时Dictionary快。
Dictionary<K,V>是泛型的,当K或V是值类型时,其速度远远超过Hashtable。
2.由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代.
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.
网友评论