hashtable是什麼,HashTable有什麼用

時間 2021-08-30 09:51:53

1樓:匿名使用者

hashtable 類基於 idictionary 介面,因此該集合中的每一元素是鍵和值對。

hashtable 由包含集合元素的儲存桶組成。儲存桶是 hashtable 中各元素的虛擬子組,與大多數集合中進行的搜尋和檢索相比,它可令搜尋和檢索更簡單、更快速。每一儲存桶都與一個雜湊**關聯,該雜湊**是使用雜湊函式生成的並基於該元素的鍵。

雜湊函式是基於鍵返回數值雜湊**的演算法。鍵是正被儲存的物件的某一屬性的值。雜湊函式必須始終為相同的鍵返回相同的雜湊**。

一個雜湊函式能夠為兩個不同的鍵生成相同的雜湊**,但從雜湊表檢索元素時,為每一唯一鍵生成唯一雜湊**的雜湊函式將令效能更佳。

在 hashtable 中用作元素的每一物件必須能夠使用 object.gethashcode 方法的實現為其自身生成雜湊**。但是,還可以通過使用 hashtable 建構函式(該建構函式將 ihashcodeprovider 實現作為其引數之一接受),為 hashtable 中的所有元素指定一個雜湊函式。

在將一個物件新增到 hashtable 時,它被儲存在儲存桶中,該儲存桶與匹配該物件的雜湊**的雜湊**關聯。當在 hashtable 內搜尋一個值時,為該值生成雜湊**,並且搜尋與該雜湊**關聯的儲存桶。

例如,一個字串的雜湊函式可以採用該字串中每一字元的 ascii **並它們新增到一起來生成一個雜湊**。字串“picnic”將具有與字串“basket”的雜湊**不同的雜湊**;因此,字串“picnic”和“basket”將處於不同的儲存桶中。與之相比,“stressed”和“desserts”將具有相同的雜湊**並將處於相同的儲存桶中。

using system;

using system.collections;

public class sampleshashtable

", myht.count );

console.writeline(myht[ "first "]);//***也可以這它!

console.writeline( " keys and values: " );

printkeysandvalues( myht );

} public static void printkeysandvalues( hashtable mylist )

:\t ", myenumerator.key, myenumerator.value); } }

2樓:吻雨

雜湊表(hashtable)又稱為“散置”,hashtable是會根據索引鍵的雜湊程式**組織成的索引鍵(key)和值(value)配對的集合。hashtable 物件是由包含集合中元素的雜湊桶(bucket)所組成的。而bucket是hashtable內元素的虛擬子群組,可以讓大部分集合中的搜尋和獲取工作更容易、更快速。

3樓:

在c#中是一個類。

這個類實現一個雜湊表,該雜湊表將鍵對映到相應的值。任何非 null 物件都可以用作鍵或值。為了成功地在雜湊表中儲存和獲取物件,用作鍵的物件必須實現 hashcode 方法和 equals 方法。

參考:http://baike.baidu.com/view/1641943.htm

4樓:匿名使用者

hashtable是個集合,通過鍵值對的方式來儲存資料,它通過add方法來新增add(object key,object value);

hashtable有什麼用?

5樓:匿名使用者

這個應該從物理來模型自和概念模型來說明比較bai好。hashtable這種資料du

結構屬於概念層的抽象數zhi據結構,定義

dao了一套adt,但是底層用什麼實現則取決於效率和方便。

hash結構還是很有用的,很多語言都提供了這種資料型別。當然,沒有什麼是不可替代的,但誰會傻比到有封裝過的hashmap這種適合問題解決的資料結構反而去用紅黑樹湊合呢?

什麼是雜湊表?特點是什麼

6樓:匿名使用者

簡單說就是按照雜湊函式關係建立的表

具體內容請參考資料結構相關知識~

下面引用一些別的地方

1 基本原理

我們使用一個下標範圍比較大的陣列來儲存元素。可以設計一個函式(雜湊函式),使得每個元素的關鍵字都與一個函式值(即陣列下標)相對應,於是用這個陣列單元來儲存這個元素;也可以簡單的理解為,按照關鍵字為每一個元素"分類",然後將這個元素儲存在相應"類"所對應的地方。

但是,不能夠保證每個元素的關鍵字與函式值是一一對應的,因此極有可能出現對於不同的元素,卻計算出了相同的函式值,這樣就產生了"衝突",換句話說,就是把不同的元素分在了相同的"類"之中。後面我們將看到一種解決"衝突"的簡便做法。

總的來說,"直接定址"與"解決衝突"是雜湊表的兩大特點。

2 函式構造

建構函式的常用方法(下面為了敘述簡潔,設 h(k) 表示關鍵字為 k 的元素所對應的函式值):

a) 除餘法:

選擇一個適當的正整數 p ,令 h(k ) = k mod p

這裡, p 如果選取的是比較大的素數,效果比較好。而且此法非常容易實現,因此是最常用的方法。

b) 數字選擇法:

如果關鍵字的位數比較多,超過長整型範圍而無法直接運算,可以選擇其中數字分佈比較均勻的若干位,所組成的新的值作為關鍵字或者直接作為函式值。

3 衝突處理

線性重新雜湊技術易於實現且可以較好的達到目的。令陣列元素個數為 s ,則當 h(k) 已經儲存了元素的時候,依次探查 (h(k)+i) mod s , i=1,2,3…… ,直到找到空的儲存單元為止(或者從頭到尾掃描一圈仍未發現空單元,這就是雜湊表已經滿了,發生了錯誤。當然這是可以通過擴大陣列範圍避免的)。

4 支援運算

雜湊表支援的運算主要有:初始化(makenull)、雜湊函式值的運算(h(x))、插入元素(insert)、查詢元素(member)。

設插入的元素的關鍵字為 x ,a 為儲存的陣列。

初始化比較容易,例如

const empty=maxlongint; // 用非常大的整數代表這個位置沒有儲存元素

p=9997; // 表的大小

procedure makenull;

var i:integer;

begin

for i:=0 to p-1 do

a[i]:=empty;

end;

雜湊函式值的運算根據函式的不同而變化,例如除餘法的一個例子:

function h(x:longint):integer;

begin

h:= x mod p;

end;

我們注意到,插入和查詢首先都需要對這個元素定位,即如果這個元素若存在,它應該儲存在什麼位置,因此加入一個定位的函式 locate

function locate(x:longint):integer;

var orig,i:integer;

begin

orig:=h(x);

i:=0;

while (ix)and(a[(orig+i)mod s]<>empty) do

inc(i);

//當這個迴圈停下來時,要麼找到一個空的儲存單元,要麼找到這個元

//素儲存的單元,要麼表已經滿了

locate:=(orig+i) mod s;

end;

插入元素

procedure insert(x:longint);

var posi:integer;

begin

posi:=locate(x); //定位函式的返回值

if a[posi]=empty then a[posi]:=x

else error; //error 即為發生了錯誤,當然這是可以避免的

end;

查詢元素是否已經在表中

procedure member(x:longint):boolean;

var posi:integer;

begin

posi:=locate(x);

if a[posi]=x then member:=true

else member:=false;

end;

這些就是建立在雜湊表上的常用基本運算。

7樓:匿名使用者

雜湊雜湊值表,一般是用來快速計算雜湊值的,就是sha-1

黃河是什麼是什麼是什麼是什麼,黃河是什麼,黃河是什麼,黃河是什麼

黃河,中國北部大河,全長約5464公里,流域面積約752443平方公里。世界第六大長河,中國第二長河。黃河發源於青海省青藏高原的巴顏喀拉山脈查哈西拉山的扎曲,北麓的卡日曲,和星宿海西的約古宗列曲,呈 幾 字形。自西向東分別流經青海 四川 甘肅 寧夏 內蒙古 陝西 山西 河南及山東9個省 自治區 最後...

書籍是什麼是什麼是什麼是什麼 比喻句

文庫精選 內容來自使用者 李鵬亞 什麼是什麼比喻句 篇一 什麼是什麼比喻句 一 比喻句的意義比喻就是通常說的打比方,即用具體的 淺顯的一個事物或情境來比方另一個抽象的 深奧的事物或情境的一種修辭手法.比喻句常有比喻詞,如 像 似的 像 一樣 好比 彷彿 等.一般有本體,喻體和比喻片語成,又有明喻 暗...

“秉”是什麼字,音序是什麼,音節是什麼,部首是什麼

三井獸 秉 b ng 音序是b音節bing 第三聲 韻母ing部首是禾。拿著,持 燭。掌握 主持 正。公。古代容量單位,一秉合十六斛。姓。或取一秉稈焉。左傳 昭公二十七年 又如 秉穗 收稻時遺留在田中的禾把與禾實 秉握 一握稻把。言數量少 量詞。十六斛。如 秉芻 十庾數量的草把 通 柄 權力,權柄 ...