程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> (教學思路 C#集合二)哈希表(1)

(教學思路 C#集合二)哈希表(1)

編輯:關於C語言

這一節我們來學習第二種集合,因為它的特性,可以提供一種相當有效率的搜索方法,所以在實際項目中非常實用,它就是哈希表。哈希繼 承了IDictionary接口,IDictionary接口提供了key(鍵)/value(值)集合設計模式,這種類集合中的每個一個對象都包含一個與它相對應的 key,可以通過所指定的key找到集合中所對應的對象(value值),這個接口最重要之處在於定義了公共屬性Item、values、keys,其中Item根 據指定的key返回集合中所對應的值,values用來返回集合中所有的對象元素,keys則返回集合中的所以key,現在你們就把key想象成存放值的 “索引值”,通過這個“索引值”可以找到值。除了哈希表有這種鍵值對的訪問機制外,下一節我們也將學習到一種 SortList 類,它是鍵/值條目和一個ArrayList集合的組合體,實現了二元搜索,性能更加強大。接下來,我們就來理解一下什麼是鍵值對的訪 問機制,同時利用實例理解哈希與HashTable類。

哈希提供了一種類似字典的數據結構,原理是通過哈希函數是一個映象,即:將關鍵字的 集合映射到某個地址集合上,它的設置很靈活,只要這個地址集合的大小不超出允許范圍即可。將集合中元素的key值經過哈希函數轉換成對應 表格中的索引值,該類的表格稱為哈希表,通過哈希函數的使用,鍵值對應到一個稱為哈希碼的值,再通過這個哈希碼形成的索引地址,找到 指定的對象元素即value值。下面我們來看一下哈希的知識要點:

哈希表是鍵/值對的集合 ,這些鍵值對根據鍵的哈希代碼進行組織, 根據鍵可以查找到相應的值。

這個要點我就不再解釋了,你們要記住的是,對哈希的操作內部機制實質上都是對鍵的操作。

鍵 不能為空或重復,value值可以。鍵、值可以為任意數據類型。

因為是對鍵的操作,所以就要求key值的唯一性,同時任何數據類型都可 以存放在哈希表中,而且對鍵值對的操作也是嚴格根據其數據類型進行的。比如key值是整型1和字符串類型的1,所查找的value值的索引地址 是不同的,這一點必須嚴格執行。

動態存放鍵/值對,容量根據實際需要自動增加。

HashTable類所創建的集合對象,容量也是 依據需要而自動增加的,它的擴充會比ArrayList更加科學,不會成倍增長,而是根據加載因子來決定,這個因子決定集合在填充多少元素時, 才繼續擴充其容量。

定義哈希表對象的語法是Hashtable hstb = new Hashtable();

常用的屬性

hstb.Count哈希表中鍵 值對的元素個數,這兩種的用法和ArrayList相同,我們著重理解的是下面兩個HashTable類的屬性:

hstb.keys取得集合中的鍵值集合 ; hstb. Values返回相對的數值集合對象。這兩個都是根據對象的元素得來的,是只讀屬性,無法修改它們的結果。

常用方法

增加元素-在增加哈希表元素的時候,有兩種方式,第一種是hstb.Add(key,value)一定要鍵值對的形式同時增加用“,”隔開;第 二種是通過鍵獲取值的形式添 加,同時這種格式也可以修改指定的鍵中的值,然後存儲在哈希對象hstb中,格式是hstb[key]=value;應注意 鍵和值的數據類型。

刪除元素-刪除元素用兩種hstb.Clear();全部刪除,第二種是根據鍵刪除元素hstb.Remove(key);

查找元素 - hstb.Contains(key)、 hstb.ContainsKey(key)查看是否包含指定的鍵,

hstb.ContainsValue(Value)是否包含指定的值,返 回的都是true或false,體現查詢結果。

遍歷元素-遍歷有兩種形式,第一種:哈希的元素是一個鍵值對,DictionaryEntry類型是一個 鍵值對的集合,使用這個類型的對象來進行遍歷hstb對象

如:foreach (DictionaryEntry jzd in hstb ) 遍歷出的對象是一個哈希的 鍵值對,然後利用jzd .Key取得鍵 ,jzd .Value取得值。

第二種遍歷是遍歷出keys或Values的集合的每個鍵或值,如  foreach( object k in hstb .Keys )或foreach( objectv in hstb .Values )

注意:因為鍵或值的數據類型可以為任意類型,所以遍歷出集合 後,存放鍵或值的變量的數據類型最好為object型,此類型包含任何一個類型。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved