輕松學(xué)習(xí)C#的哈希表
在C#語言中,還有一種用于快速搜索而組織的鍵/值組合的數(shù)組,這種數(shù)組叫做關(guān)聯(lián)數(shù)組,也叫做哈希表(Hashtable)。
哈希表也在System.Collection命名空間下,用于處理和表現(xiàn)類似key/value的鍵值對(duì),其中key通常用來快速查找,同時(shí)key是區(qū)分大小寫,且key必須是唯一的。它沒有有效的排序,所進(jìn)行的是內(nèi)在的排序,value用于存儲(chǔ)對(duì)應(yīng)于key的值。哈希表中key/value鍵值對(duì)均為object類型,所以哈希表可以支持任何類型的key/value鍵值對(duì)。哈希表的每個(gè)元素是一個(gè)存儲(chǔ)在DictionaryEntry對(duì)象中的鍵值對(duì)鍵值對(duì)(所謂的DictionaryEntry結(jié)構(gòu),就是定義可設(shè)置或檢索的字典鍵值對(duì),有一個(gè)key屬性,一個(gè)value屬性,分別代表鍵和值)。
哈希表最大的優(yōu)點(diǎn)就是把數(shù)據(jù)的存儲(chǔ)和查找消耗的時(shí)間大大降低,幾乎可以看成常數(shù)時(shí)間,而代價(jià)僅僅是消耗較多的內(nèi)存。然而在當(dāng)前可利用內(nèi)存越來越多的情況下,用空間換時(shí)間的做法是值得的。另外,編碼比較容易也是它的特點(diǎn)之一。
一、Hashtable元素的添加
Hashtable提供了一個(gè)添加元素的key/value鍵值對(duì)Add方法,該方法有兩個(gè)參數(shù),一個(gè)是鍵,功能相當(dāng)于數(shù)組中的索引,幫助查找,另一個(gè)是值,可以把它看做數(shù)組中的元素,其格式為:Hashtable對(duì)象.Add(鍵,值)
例一、利用上述的方法進(jìn)行Hashtable對(duì)象的元素的添加
<span style="font-size:18px;">using System; using System.Collections;//需要添加的命名空間 using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 哈希表 { class Program { static void Main(string[] args) { Hashtable al = new Hashtable(); Console.WriteLine("添加前al的元素個(gè)數(shù)為:"+al.Count); al.Add("1", "a"); al.Add("2", "b"); al.Add("3", "c"); Console.WriteLine("添加后al的元素個(gè)數(shù)為:"+al.Count); Console.ReadLine(); } } }</span>
輸出的結(jié)果為:添加前al的元素個(gè)數(shù)為:0
添加后al的元素個(gè)數(shù)為:3
二、Hashtable元素的刪除
Hashtable對(duì)象的元素的刪除可通過Remove方法,Clear方法來進(jìn)行。
(1).Clear方法將清除所有的元素,其格式為:Hashtable對(duì)象.Clear()
(2).Remove方法接受一個(gè)key參數(shù),作用是移除一個(gè)key/value鍵值對(duì),其格式為:Hashtable對(duì)象.Remove()
例二、利用上述方法進(jìn)行Hashtable元素的刪除
<span style="font-size:18px;">using System; using System.Collections;//需要添加的命名空間 using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 哈希表 { class Program { static void Main(string[] args) { Hashtable al = new Hashtable(); Console.WriteLine("添加前al的元素個(gè)數(shù)為:"+al.Count); al.Add("1", "a"); al.Add("2", "b"); al.Add("3", "c"); Console.WriteLine("添加后al的元素個(gè)數(shù)為:"+al.Count); al.Remove("3"); Console.WriteLine("刪除3后al的元素個(gè)數(shù)為:"+al.Count); Console.ReadLine(); } } }</span>
輸出的結(jié)果為:添加前al的元素個(gè)數(shù)為:0
添加后al的元素個(gè)數(shù)為:3
刪除C后al的元素個(gè)數(shù)為:2
三、Hashtable元素的遍歷
遍歷哈希表需要用到DictionaryEntry(字典鍵/值對(duì))Object。
例三、利用foreach語句對(duì)哈希表進(jìn)行遍歷
<span style="font-size:18px;">using System; using System.Collections;//需要添加的命名空間 using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 哈希表 { class Program { static void Main(string[] args) { Hashtable al = new Hashtable(); Console.WriteLine("添加前al的元素個(gè)數(shù)為:"+al.Count); al.Add("1", "a"); al.Add("2", "b"); al.Add("3", "c"); Console.WriteLine("添加后al的元素個(gè)數(shù)為:"+al.Count); foreach (DictionaryEntry t in al) { Console.Write("鍵位:"+t.Key+" 值為:"); Console.WriteLine(t.Value); } Console.ReadLine(); } } }</span>
輸出的結(jié)果為:添加前al的元素個(gè)數(shù)為:0
添加后al的元素個(gè)數(shù)為:3
鍵位:1 值為:a
鍵位:2 值為:b
鍵位:3 值為:c
四、Hashtable元素的查找
Hashtable集合提供三個(gè)查找方法查找Hashtable中的元素,這三個(gè)方法為Contains方法,ContainsKe和方法和ContainsValue方法。
Contains方法,ContainsKey方法是根據(jù)Hashtable的key值去查找,如果找到,返回匹配的最后一項(xiàng)的自0開始的索引,否則返回-1,其格式為:
Hashtable對(duì)象.Contains(key值)或 Hashtable對(duì)象.ContainsKey(key值)
ContainValue方法是根據(jù)Hashtable的value值去查找,如果找到,返回匹配的最后一項(xiàng)自0開始的索引,否則,返回-1,其格式為:Hashtable對(duì)象.ContainsValue(Value值)
例四、利用上述的方法進(jìn)行Hashtable元素的查找
<span style="font-size:18px;">using System; using System.Collections;//需要添加的命名空間 using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 哈希表 { class Program { static void Main(string[] args) { Hashtable al = new Hashtable(); Console.WriteLine("添加前al的元素個(gè)數(shù)為:"+al.Count); al.Add("1", "a"); al.Add("2", "b"); al.Add("3", "c"); Console.WriteLine("添加后al的元素個(gè)數(shù)為:"+al.Count); if (al.Contains("1")) { Console.WriteLine("1存在al中"); } if (al.ContainsKey("2")) { Console.WriteLine("2存在al中"); } if (al.ContainsValue("c")) { Console.WriteLine("c存在al中"); } Console.ReadLine(); } } }</span>
輸出的結(jié)果為:添加前al的元素個(gè)數(shù)為:0
添加后al的元素個(gè)數(shù)為:3
1存在al中
2存在al中
c存在al中
以上就是關(guān)于C#的哈希表相關(guān)介紹,希望對(duì)大家的學(xué)習(xí)有所幫助
上一篇:C#實(shí)現(xiàn)兩個(gè)窗體之間數(shù)值傳送的方法
欄 目:C#教程
下一篇:C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解
本文標(biāo)題:輕松學(xué)習(xí)C#的哈希表
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6817.html
您可能感興趣的文章
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并打開的方法
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#停止線程的方法
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新聞效果的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實(shí)現(xiàn)多線程下載文件的方法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁面的局部加載