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 方法。
參考
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
什麼是什麼是什麼是什麼造句,什麼是什麼,什麼也是什麼造句
日子像一條小溪,汩汩 g 地向前流去.日子像一雙筷子,夾著酸甜苦辣的現實.日子如 像一團麻,總有那解不開的疙疙瘩瘩。日子如 像水,掬不起來,只能眼睜睜的看它流走.語文是無色無味的清水,讓人反覆咀嚼。語文是清香苦澀的綠茶,讓人細細品味。語文是惟妙惟肖的國畫,讓人賞心悅目。語文是朗朗上口的詩句,讓人陶冶...
是什麼?是什麼?還是什麼造句,用是什麼是什麼還是什麼造句
1 小明的學習成績優秀,是刻苦?是努力?還是日積月累的沉澱?2 這種衣料很難分辨出是棉布?是麻布?還是化纖布?3 在你的學生時代中,你最喜歡的,是懵懵懂懂地小學?是青青澀澀地中學?還是真真實實地大學?4 迎面飄來的花香來自 是玫瑰?是月季?還是海棠?5 你最喜歡的季節,是春回大地 萬物復甦的春天,是...
父母的愛是什麼是什麼是什麼是什麼
黃土當如何 這個問題看上去很簡單,實際上卻有些難。在這年頭做父母的人還不如做子女的人。在子女眼中,父母是偉大的,是了不起的。對自己有大恩的,沒有他們就沒有我。但是在父母眼中,孩子是什麼,傳宗接代的工具。被父母逼的沒辦法敷衍父母的工具,一個長期的保險,一個低成本的投資。父母生孩子很少是因為愛孩子而生的...