在c#語言中,還有一種用於快速搜尋而組織的鍵/值組合的陣列,這種陣列叫做關聯陣列,也叫做雜湊表(hashtable)。
雜湊表也在system.collection命名空間下,用於處理和表現類似key/value的鍵值對,其中key通常用來快速查詢,同時key是區分大小寫,且key必須是唯一的。它沒有有效的排序,所進行的是內在的排序,value用於儲存對應於key的值。雜湊表中key/value鍵值對均為object型別,所以雜湊表可以支援任何型別的key/value鍵值對。nunqzqsyk雜湊表的每個元素是乙個儲存在dictionaryentry物件中的鍵值對鍵值對(所謂的dictionaryentry結構,就是定義可設定或檢索的字典鍵值對,有乙個key屬性,乙個value屬性,分別代表鍵和值)。
雜湊表最大的優點就是把資料的儲存和查詢消耗的時間大大降低,幾乎可以看成常數時間,而代價僅僅是消耗較多的記憶體。然而在當前可利用記憶體越來越多的情況下,用空間換時間的做法是值得的。另外,編碼比較容易也是它的特點之一。
一、hashtable元素的新增
hashtable提供了乙個新增元素的key/value鍵值對add方法,該方法有兩個引數,乙個是鍵,功能相當於陣列中的索引,幫助查詢,另乙個是值,可以把它看做陣列中的元素,其格式為:hashtable物件.add(鍵,值)
例一、利用上述的方法進行hashtable物件的元素的新增
using system;
using system.collections;//需要新增的命名空間
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 雜湊表 } }
輸出的結果為:新增前al的元素個數為:0
&www.cppcns.comnbsp; 新增後al的元素個數為:3
二、hashtable元素的刪除
hashtable物件的元素的刪除可通過remove方法,clear方法來進行。
(1).clear方法將清除所有的元素,其格式為:hashtable物件.clear()
(2).remove方法接受乙個key引數,作用是移除乙個key/value鍵值對,其格式為:hashtable物件.remove()
例二、利用上述方法進行hashtable元素的刪除
using system;
using system.collections;//需要新增的命名空間
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 雜湊表 } }
輸出的結果為:新增前al的元素個數為:0
新增後al的元素個數為:3
刪除c後al的元素個數為:2
三、hashtable元素的遍歷
遍歷雜湊表需要用到dictionaryentry(字典鍵/值對)object。
例三、利用foreach語句對雜湊表進行遍歷
using system;
using system.collections;//需要新增的命名空間
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 雜湊表
console.readline();
} } }
輸出的結果為:新增前al的元素個數為:0
新增後al的元素個數為:3
鍵位:1 值為:a
鍵位:2 值為:b
&n程式設計客棧bsp; 鍵位:3 值為:c
四、hashtable元素的查詢
hashtable集合提供三個查詢方法查詢hashtable中的元素,這三個方法為contains方法,containske和方法和containsvalue方法。
contains方法,containskey方法是根據hashtable的key值去查詢,如果找到,返回匹配的最後一項的自0開始的索引,否則返回-1,其格式為:
hashtable物件.contain值)或 hashtable物件.containskey(key值)
containvalue方法是根據hashtable的value值去查詢,如果找到,返回匹配的最後一項自0開始的索引,否則,返回-1,其格式為:hashtable物件.containsvalue(value值)
例四、利用上述的方法進行hashtable元素的查詢
using system;
using system.collections;//需要新增的命名空間
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace 雜湊表
if (al.containskey("2"))
if (al.containsvalue("c"))
console.readline();
} } }
輸出的結果為:新增前al的元素個數為:0
新增後al的元素個數為:3
1存在al中
2存在al中
c存在al中
雜湊表(雜湊表) C 實現
雜湊函式就是 關鍵字key 到 值value 的對映 value f key value反映的是關鍵字key的儲存位址。直接定址法 f key a key b 例如存放不同出生年份的人口數量,出生年份是關鍵字,那麼可以用直接定址法。直接定址法的優點是簡單均勻,也不會產生衝突 缺點是該方法適合表比較小...
學習雜湊表
雜貨店商品對應的 舉例 簡單查詢就是拿出商品價目本,這個價目本並不是有序的,顧客問蘋果多少錢,需要乙個乙個去查詢某乙個商品的 需要o n 時間。同樣是乙個價目本,但是按商品名稱字母排序的,這樣需要的時候更短為o logn 但這樣我還是覺得查詢太慢,怎麼辦,這時候需要一名能記住所有商品 的員工,這樣一...
雜湊表 學習
看了幾篇文章,主要意思就是用簡單的值index,去索引複雜的值key,進而找到想要的值value.雜湊演算法主旨 index f key 資料存放格式 key.value 但是存在問題是,1.雜湊演算法使不同的key產生相同的index 2.分配給雜湊表的記憶體滿了之後,整個雜湊表的遷移太累贅了。針...