亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

HashTable、HashSet和Dictionary的區(qū)別點(diǎn)總結(jié)

 更新時(shí)間:2020年03月10日 11:11:21   作者:返回主頁大龍哥  
在本篇文章里小編給大家整理的是關(guān)于HashTable、HashSet和Dictionary的區(qū)別點(diǎn),需要的朋友們可以學(xué)習(xí)下。

今天又去面試了,結(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# 實(shí)現(xiàn)語音合成

    c# 實(shí)現(xiàn)語音合成

    這篇文章主要介紹了c# 實(shí)現(xiàn)語音合成的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • c# 基于任務(wù)的異步編程模式(TAP)的異常處理

    c# 基于任務(wù)的異步編程模式(TAP)的異常處理

    這篇文章主要介紹了c# 基于任務(wù)的異步編程模式的異常處理方法,幫助大家更好的理解和學(xué)習(xí)c#
    2020-11-11
  • C# Winform使用log4net進(jìn)行日志記錄

    C# Winform使用log4net進(jìn)行日志記錄

    Log4Net是從Java的log4j移植過來的,功能也與log4j類似,可以把日志信息輸出到文件、數(shù)據(jù)庫等不同的介質(zhì)或目標(biāo),下面我們就來學(xué)習(xí)一下如何使用log4net進(jìn)行日志記錄吧
    2023-11-11
  • c#數(shù)據(jù)庫與TXT導(dǎo)入導(dǎo)出的實(shí)例

    c#數(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-04
  • winform實(shí)現(xiàn)限制及解除鼠標(biāo)移動(dòng)范圍的方法

    winform實(shí)現(xiàn)限制及解除鼠標(biāo)移動(dòng)范圍的方法

    這篇文章主要介紹了winform實(shí)現(xiàn)限制及解除鼠標(biāo)移動(dòng)范圍的方法,涉及C#控制WinForm鼠標(biāo)事件屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • C#查找列表中所有重復(fù)出現(xiàn)元素的方法

    C#查找列表中所有重復(fù)出現(xiàn)元素的方法

    這篇文章主要介紹了C#查找列表中所有重復(fù)出現(xiàn)元素的方法,涉及C#針對(duì)列表操作的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#調(diào)用SQL?Server中有參數(shù)的存儲(chǔ)過程

    C#調(diào)用SQL?Server中有參數(shù)的存儲(chǔ)過程

    這篇文章介紹了C#調(diào)用SQL?Server中有參數(shù)存儲(chǔ)過程的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • c#中CAD文件讀取實(shí)例

    c#中CAD文件讀取實(shí)例

    在本篇文章里小編給大家整理的是一篇關(guān)于c#中CAD文件讀取實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-05-05
  • C#中深拷貝和淺拷貝的介紹與用法

    C#中深拷貝和淺拷貝的介紹與用法

    本文詳細(xì)講解了C#中深拷貝和淺拷貝的介紹與用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • C#使用自帶的email組件發(fā)送郵件的方法

    C#使用自帶的email組件發(fā)送郵件的方法

    這篇文章主要介紹了C#使用自帶的email組件發(fā)送郵件的方法,涉及C#發(fā)送郵件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論