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部首是禾。拿著,持 燭。掌握 主持 正。公。古代容量單位,一秉合十六斛。姓。或取一秉稈焉。左傳 昭公二十七年 又如 秉穗 收稻時遺留在田中的禾把與禾實 秉握 一握稻把。言數量少 量詞。十六斛。如 秉芻 十庾數量的草把 通 柄 權力,權柄 ...