C#中HashTable用法和Dictionary比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中HashTable用法和Dictionary比较相关的知识,希望对你有一定的参考价值。
参考技术A 一、哈希表(Hashtable)用法二、哈希表(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 能获得一定方便.
C#中HashTable的用法
命名空间
System.Collections
名称
哈希表(Hashtable)
描述
用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.
二,哈希表的简单操作
Hashtable hshTable = new Hashtable(); // 创建哈希表
hshTable .Add("Person1", "zhanghf"); // 往哈希表里添加键值对
hshTable .Clear(); //移除哈希表里所有的键值对
hshTable .Contains("Person1"); //判断哈希表里是否包含该键
string name = (string)hshTable["Person1"].ToString(); //取哈希表里指定键的值
hshTable.Remove("Person1"); // 删除哈希表里指定键的键值对
IDictionaryEnumerator en = hshTable.GetEnumerator(); // 遍历哈希表所有的键,读出相应的值
while (en.MoveNext())
{
string str = en.Value.ToString();
}
下面控制台程序将包含以上所有操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
class Program { static void Main( string [] args) { // 创建一个Hashtable实例 Hashtable ht= new Hashtable(); // 添加keyvalue键值对 ht.Add( "A" , "1" ); ht.Add( "B" , "2" ); ht.Add( "C" , "3" ); ht.Add( "D" , "4" ); // 遍历哈希表 foreach (DictionaryEntry de in ht) { Console.WriteLine( "Key -- {0}; Value --{1}." , de.Key, de.Value); } // 哈希表排序 ArrayList akeys= new ArrayList(ht.Keys); akeys.Sort(); foreach ( string skey in akeys) { Console.WriteLine( "{0, -15} {1, -15}" , skey, ht[skey]); } // 判断哈希表是否包含特定键,其返回值为true或false if (ht.Contains( "A" )) Console.WriteLine(ht[ "A" ]); // 给对应的键赋值 ht[ "A" ] = "你好" ; // 移除一个keyvalue键值对 ht.Remove( "C" ); // 遍历哈希表 foreach (DictionaryEntry de in ht) { Console.WriteLine( "Key -- {0}; Value --{1}." , de.Key, de.Value); } // 移除所有元素 ht.Clear(); // 此处将不会有任何输出 Console.WriteLine(ht[ "A" ]); Console.ReadKey(); } } |
以上是关于C#中HashTable用法和Dictionary比较的主要内容,如果未能解决你的问题,请参考以下文章
dotnet C# 字典 Dictionary 和 Hashtable 的性能对比
C# Dictionary<>和HashTable中遍历Keys怎么写?