HashTable、HashSet和Dictionary的區(qū)別點(diǎn)總結(jié)
今天又去面試了,結(jié)果依然很悲催,平時(shí)太過于關(guān)注表面上的東西,有些實(shí)質(zhì)卻不太清楚,遇到HashTable和Dictionary相關(guān)的知識(shí),記錄下來,希望對(duì)后來人有所幫助,以及對(duì)自己以后復(fù)習(xí)可以參考。
1.HashTable
哈希表(HashTable)表示鍵/值對(duì)的集合。在.NET Framework中,Hashtable是System.Collections命名空間提供的一個(gè)容器,用于處理和表現(xiàn)類似key-value的鍵值對(duì),其中key通??捎脕砜焖俨檎?,同時(shí)key是區(qū)分大小寫;value用于存儲(chǔ)對(duì)應(yīng)于key的值。Hashtable中key-value鍵值對(duì)均為object類型,所以Hashtable可以支持任何類型的keyvalue鍵值對(duì),任何非 null 對(duì)象都可以用作鍵或值。
在哈希表中添加一個(gè)key/鍵值對(duì):HashtableObject.Add(key,);
在哈希表中去除某個(gè)key/鍵值對(duì):HashtableObject.Remove(key);
從哈希表中移除所有元素: HashtableObject.Clear();
判斷哈希表是否包含特定鍵key: HashtableObject.Contains(key);
2.HashSet
HashSet<T>類主要是設(shè)計(jì)用來做高性能集運(yùn)算的,例如對(duì)兩個(gè)集合求交集、并集、差集等。集合中包含一組不重復(fù)出現(xiàn)且無特性順序的元素,HashSet拒絕接受重復(fù)的對(duì)象。
HashSet<T>的一些特性如下:
a. HashSet<T>中的值不能重復(fù)且沒有順序。
b. HashSet<T>的容量會(huì)按需自動(dòng)添加。
3.Dictionary
Dictionary表示鍵和值的集合。
Dictionary<string, string>是一個(gè)泛型
他本身有集合的功能有時(shí)候可以把它看成數(shù)組
他的結(jié)構(gòu)是這樣的:Dictionary<[key], [value]>
他的特點(diǎn)是存入對(duì)象是需要與[key]值一一對(duì)應(yīng)的存入該泛型
通過某一個(gè)一定的[key]去找到對(duì)應(yīng)的值
4.HashTable和Dictionary的區(qū)別:
(1).HashTable不支持泛型,而Dictionary支持泛型。
(2). Hashtable 的元素屬于 Object 類型,所以在存儲(chǔ)或檢索值類型時(shí)通常發(fā)生裝箱和拆箱的操作,所以你可能需要進(jìn)行一些類型轉(zhuǎn)換的操作,而且對(duì)于int,float這些值類型還需要進(jìn)行裝箱等操作,非常耗時(shí)。
(3).單線程程序中推薦使用 Dictionary, 有泛型優(yōu)勢(shì), 且讀取速度較快, 容量利用更充分。多線程程序中推薦使用 Hashtable, 默認(rèn)的 Hashtable 允許單線程寫入, 多線程讀取, 對(duì) Hashtable 進(jìn)一步調(diào)用 Synchronized() 方法可以獲得完全線程安全的類型. 而 Dictionary 非線程安全, 必須人為使用 lock 語句進(jìn)行保護(hù), 效率大減。
(4)在通過代碼測(cè)試的時(shí)候發(fā)現(xiàn)key是整數(shù)型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率沒有Hashtable快。
static void IntMethod() { int count = 1000000; Dictionary<int, int> dictionary = new Dictionary<int, int>(); Hashtable hashtable = new Hashtable(); for (int i = 0; i < count; i++) { dictionary.Add(i,i); hashtable.Add(i,i); } Stopwatch stopwatch = Stopwatch.StartNew(); for (int i = 0; i < count; i++) { int value = dictionary[i]; } stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); stopwatch = Stopwatch.StartNew(); for (int i = 0; i < count; i++) { object value = hashtable[i]; } stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); } static void MethodString() { int count = 1000000; Dictionary<string, string> dictionary = new Dictionary<string, string>(); Hashtable hashtable=new Hashtable(); for (int i = 0; i < count; i++) { dictionary.Add(i.ToString(),"aaa"); hashtable.Add(i.ToString(),"aaa"); } Stopwatch stopwatch = Stopwatch.StartNew(); for (int i = 0; i < count; i++) { string value=dictionary[i.ToString()]; } stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); stopwatch = Stopwatch.StartNew(); for (int i = 0; i < count; i++) { object value = hashtable[i.ToString()]; } stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); }
今天面試最大的收獲,不是總結(jié)以上的東西,而是讓我明白了許多東西不要追求表面的,不是為了完成什么功能,而學(xué)習(xí)某種技術(shù),更應(yīng)該深入的去理解它的本質(zhì),基礎(chǔ)很重要。三位面試官,都非常出色,講了許多我平常很少用到的東西,和他們?cè)谝黄鸾涣?,?huì)學(xué)到不少的東西,真希望以后能進(jìn)入像這樣的公司,讓自己快速的成長起來。
面試,不止是為了找一份滿意的工作,從中可以讓你學(xué)會(huì)如何溝通,如何去推銷自己,更重要的是讓自己了解自己的不足,自己在哪些方面還欠缺,還有待提高。
到此這篇關(guān)于HashTable、HashSet和Dictionary的區(qū)別點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)HashTable、HashSet和Dictionary的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# Winform使用log4net進(jìn)行日志記錄
Log4Net是從Java的log4j移植過來的,功能也與log4j類似,可以把日志信息輸出到文件、數(shù)據(jù)庫等不同的介質(zhì)或目標(biāo),下面我們就來學(xué)習(xí)一下如何使用log4net進(jìn)行日志記錄吧2023-11-11c#數(shù)據(jù)庫與TXT導(dǎo)入導(dǎo)出的實(shí)例
最近剛學(xué)完ADO.NET,做了個(gè)數(shù)據(jù)導(dǎo)入導(dǎo)出的題目,是將txt中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫,然后將數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出到txt中,這里說的數(shù)據(jù)的格式是“tom|23”,tom指名字,23指年齡。廢話也不多說了,大家直接看代碼。2013-04-04winform實(shí)現(xiàn)限制及解除鼠標(biāo)移動(dòng)范圍的方法
這篇文章主要介紹了winform實(shí)現(xiàn)限制及解除鼠標(biāo)移動(dòng)范圍的方法,涉及C#控制WinForm鼠標(biāo)事件屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09C#調(diào)用SQL?Server中有參數(shù)的存儲(chǔ)過程
這篇文章介紹了C#調(diào)用SQL?Server中有參數(shù)存儲(chǔ)過程的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03