欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

今天又去面試了,結(jié)果依然很悲催,平時太過于關注表面上的東西,有些實質(zhì)卻不太清楚,遇到HashTable和Dictionary相關的知識,記錄下來,希望對后來人有所幫助,以及對自己以后復習可以參考。

1.HashTable

哈希表(HashTable)表示鍵/值對的集合。在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似key-value的鍵值對,其中key通常可用來快速查找,同時key是區(qū)分大小寫;value用于存儲對應于key的值。Hashtable中key-value鍵值對均為object類型,所以Hashtable可以支持任何類型的keyvalue鍵值對,任何非 null 對象都可以用作鍵或值。

在哈希表中添加一個key/鍵值對:HashtableObject.Add(key,); 

在哈希表中去除某個key/鍵值對:HashtableObject.Remove(key);

從哈希表中移除所有元素: HashtableObject.Clear();

判斷哈希表是否包含特定鍵key: HashtableObject.Contains(key);

2.HashSet

HashSet<T>類主要是設計用來做高性能集運算的,例如對兩個集合求交集、并集、差集等。集合中包含一組不重復出現(xiàn)且無特性順序的元素,HashSet拒絕接受重復的對象。

HashSet<T>的一些特性如下:

a. HashSet<T>中的值不能重復且沒有順序。

b. HashSet<T>的容量會按需自動添加。

3.Dictionary

Dictionary表示鍵和值的集合。

Dictionary<string, string>是一個泛型

他本身有集合的功能有時候可以把它看成數(shù)組

他的結(jié)構是這樣的:Dictionary<[key], [value]>

他的特點是存入對象是需要與[key]值一一對應的存入該泛型

通過某一個一定的[key]去找到對應的值

4.HashTable和Dictionary的區(qū)別:

(1).HashTable不支持泛型,而Dictionary支持泛型。

(2). Hashtable 的元素屬于 Object 類型,所以在存儲或檢索值類型時通常發(fā)生裝箱和拆箱的操作,所以你可能需要進行一些類型轉(zhuǎn)換的操作,而且對于int,float這些值類型還需要進行裝箱等操作,非常耗時。

(3).單線程程序中推薦使用 Dictionary, 有泛型優(yōu)勢, 且讀取速度較快, 容量利用更充分。多線程程序中推薦使用 Hashtable, 默認的 Hashtable 允許單線程寫入, 多線程讀取, 對 Hashtable 進一步調(diào)用 Synchronized() 方法可以獲得完全線程安全的類型. 而 Dictionary 非線程安全, 必須人為使用 lock 語句進行保護, 效率大減。

(4)在通過代碼測試的時候發(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é)以上的東西,而是讓我明白了許多東西不要追求表面的,不是為了完成什么功能,而學習某種技術,更應該深入的去理解它的本質(zhì),基礎很重要。三位面試官,都非常出色,講了許多我平常很少用到的東西,和他們在一起交流,會學到不少的東西,真希望以后能進入像這樣的公司,讓自己快速的成長起來。

面試,不止是為了找一份滿意的工作,從中可以讓你學會如何溝通,如何去推銷自己,更重要的是讓自己了解自己的不足,自己在哪些方面還欠缺,還有待提高。

到此這篇關于HashTable、HashSet和Dictionary的區(qū)別點總結(jié)的文章就介紹到這了,更多相關HashTable、HashSet和Dictionary的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

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

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

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

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

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

    C# Winform使用log4net進行日志記錄

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

    c#數(shù)據(jù)庫與TXT導入導出的實例

    最近剛學完ADO.NET,做了個數(shù)據(jù)導入導出的題目,是將txt中的數(shù)據(jù)導入數(shù)據(jù)庫,然后將數(shù)據(jù)庫中的數(shù)據(jù)導出到txt中,這里說的數(shù)據(jù)的格式是“tom|23”,tom指名字,23指年齡。廢話也不多說了,大家直接看代碼。
    2013-04-04
  • winform實現(xiàn)限制及解除鼠標移動范圍的方法

    winform實現(xiàn)限制及解除鼠標移動范圍的方法

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

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

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

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

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

    c#中CAD文件讀取實例

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

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

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

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

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

最新評論