C 中雜湊表 HashTable 的用法詳解

2021-09-06 07:48:24 字數 3205 閱讀 3015

1.  雜湊表(hashtable)簡述

在.net framework中,hashtable是system.collections命名空間提供的乙個容器,用於處理和表現類似keyvalue的鍵值對,其中key通常可用來快速查詢,同時key是區分大小寫;value用於儲存對應於key的值。hashtable中keyvalue鍵值對均為object型別,所以hashtable可以支援任何型別的keyvalue鍵值對.

2. 什麼情況下使用雜湊表

(1)某些資料會被高頻率查詢

(2)資料量大

(3)查詢字段包含字串型別

(4)資料型別不唯一

3.雜湊表的使用方法

雜湊表需要使用的namespace

using

system.collections;

using system.collections.generic;

雜湊表的基本操作:

//

新增乙個keyvalue鍵值對:

hashtableobject.add(key,value);

//移除某個keyvalue鍵值對:

hashtableobject.remove(key);

//移除所有元素:

hashtableobject.clear();

//判斷是否包含特定鍵key:

hashtableobject.contains(key);

控制台程式例子:

using

system;

using system.collections; //

file使用hashtable時,必須引入這個命名空間

class

program

}

雜湊表中使用多種資料型別的例子:

using

system;

using

system.collections;

class

program

static

void

main()

}

當獲取雜湊表中資料時,如果型別宣告的不對,會出現invalidcastexception錯誤。使用as-statements可以避免該錯誤。

using

system;

using

system.collections;

using

system.io;

class

program

//轉換失敗,獲取的值為null,但不會丟擲錯誤。

streamreader reader = hashtable[100] as

streamreader;

if (reader == null

)

//也可以直接獲取object值,再做判斷

object value2 = hashtable[100

];

if (value2 is

string

)

}}

4. 遍歷雜湊表

遍歷雜湊表需要用到dictionaryentry object,**如下:

for(dictionaryentry de in ht) //

ht為乙個hashtable例項

遍歷鍵

foreach (int key in

hashtable.keys)

遍歷值

foreach (string value in

hashtable.values)

5.對雜湊表進行排序

對雜湊表按key值重新排列的做法:

arraylist akeys=new

arraylist(ht.keys);

akeys.sort();

//按字母順序進行排序

foreach(string key in

akeys)

6. 雜湊表的效率

system.collections下的雜湊表(hashtable)和system.collections.generic下的字典(dictionary)都可用作lookup table,下面比較一下二者的執行效率。

stopwatch sw = new

stopwatch();

hashtable hashtable = new

hashtable();

dictionary

dictionary = new dictionary();

int countnum = 1000000

;sw.start();

for (int i = 0; i < countnum; i++)

sw.stop();

console.writeline(sw.elapsedmilliseconds);

//輸出: 744

sw.restart();

for (int i = 0; i < countnum; i++)

sw.stop();

console.writeline(sw.elapsedmilliseconds);

//輸出: 489

sw.restart();

for (int i = 0; i < countnum; i++)

sw.stop();

console.writeline(sw.elapsedmilliseconds);

//輸出: 245

sw.restart();

for (int i = 0; i < countnum; i++)

sw.stop();

console.writeline(sw.elapsedmilliseconds);

//輸出: 192

由此可見,新增資料時hashtable快。頻繁呼叫資料時dictionary快。

結論:dictionary是泛型的,當k或v是值型別時,其速度遠遠超過hashtable。

C 中的雜湊表 Hashtable 應用

一.雜湊表 hashtable 簡述 在.net framework中,hashtable是system.collections命名空間提供的乙個容器,用於處理和表現類似key value的鍵值對,其中key通常可用來快速查詢,同時key是區分大小寫 value用於儲存對應於key的值。hashta...

C 中的雜湊表 Hashtable 應用

一.雜湊表 hashtable 簡述 在.net framework中,hashtable是system.collections命名空間提供的乙個容器,用於處理和表現類似key value的鍵值對,其中key通常可用來快速查詢,同時key是區分大小寫 value用於儲存對應於key的值。hashta...

hash table 雜湊表(雜湊表)

hash table 也叫雜湊表。涉及到雜湊函式 雜湊衝突處理的問題。雜湊函式是雜湊表的關鍵,是用來從值到雜湊表索引 存放位置 的對映。比如 要存放乙個學校學生的姓名,他們是amanda,jack,andy,tom,bob,black等等500個人。我們可以設計乙個雜湊表,容量為500,來存放這些學...