一、哈希表(Hashtable)用法
- 哈希表(HashTable)簡述
Hashtable是System.Collections命名空間提供的一個容器掀宋,用于處理和表現(xiàn)類似key-value的鍵值對天梧。
key通晨裕可用來快速查找,同時key是區(qū)分大小寫呢岗;value用于存儲對應于key的值。
Hashtable中key-value鍵值對均為object類型蛹尝,所以Hashtable可以支持任何類型的key-value鍵值對. - 什么情況下使用哈希表
(1)某些數(shù)據(jù)會被高頻率查詢
(2)數(shù)據(jù)量大
(3)查詢字段包含字符串類型
(4)數(shù)據(jù)類型不唯一 - 哈希表的使用方法
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.添加數(shù)據(jù)時Hashtable快。頻繁調用數(shù)據(jù)時Dictionary快突那。
Dictionary<K,V>是泛型的挫酿,當K或V是值類型時,其速度遠遠超過Hashtable愕难。
2.由于 Hashtable 和 Dictionary 同時存在, 在使用場景上必然存在選擇性, 并不任何時刻都能相互替代.
[1] 單線程程序中推薦使用 Dictionary, 有泛型優(yōu)勢, 且讀取速度較快, 容量利用更充分.
[2] 多線程程序中推薦使用 Hashtable, 默認的 Hashtable 允許單線程寫入, 多線程讀取, 對 Hashtable 進一步調用 Synchronized() 方法可以獲得完全線程安全的類型. 而 Dictionary 非線程安全, 必須人為使用 lock 語句進行保護, 效率大減.
[3] Dictionary 有按插入順序排列數(shù)據(jù)的特性 (注: 但當調用 Remove() 刪除過節(jié)點后順序被打亂), 因此在需要體現(xiàn)順序的情境中使用 Dictionary 能獲得一定方便.