最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# ArrayList、HashSet、HashTable、List、Dictionary的區(qū)別詳解

 更新時間:2019年08月29日 15:32:55   作者:bluesky0318  
這篇文章主要介紹了C# ArrayList、HashSet、HashTable、List、Dictionary的區(qū)別的相關(guān)知識點內(nèi)容,有需要朋友們參考下。

在C#中,數(shù)組由于是固定長度的,所以常常不能滿足我們開發(fā)的需求。

由于這種限制不方便,所以出現(xiàn)了ArrayList。

ArrayList、List<T>

ArrayList是可變長數(shù)組,你可以將任意多的數(shù)據(jù)Add到ArrayList里面。其內(nèi)部維護的數(shù)組,當長度不足時,會自動擴容為原來的兩倍。

但是ArrayList也有一個缺點,就是存入ArrayList里面的數(shù)據(jù)都是Object類型的,所以如果將值類型存入和取出的時候會發(fā)生裝箱、拆箱操作(就是值類型與引用類型之間的轉(zhuǎn)換),這個會影響程序性能。在.Net 2.0泛型出現(xiàn)以后,就提供了List<T>。

List<T>是ArrayList的泛型版本,它不再需要裝箱拆箱,直接取,直接用,它基本與ArrayList一致,不過在使用的時候要先設(shè)置好它的類型,而設(shè)置好類型之后,不是這種類型的數(shù)據(jù),是不允許Add進去的。

就性能來說,如果要存進數(shù)組的只有一種數(shù)據(jù),那么無疑List<T>是最優(yōu)選擇。

List<int> ListInt = new List<int>();

如果一個變長數(shù)組,又要存int,又要存string。那么就只能用ArrayList。

HashTable(哈希表)、Dictionary<T,T>

HashTable是一種根據(jù)key查找非??斓逆I值數(shù)據(jù)結(jié)構(gòu),不能有重復key,而且由于其特點,其長度總是一個素數(shù),所以擴容后容量會比2倍大一點點,加載因子為0.72f。

當要大量使用key來查找value的時候,HashTable無疑是最有選擇,HashTable與ArrayList一樣,是非泛型的,value存進去是object,存取會發(fā)生裝箱、拆箱,所以出現(xiàn)了Dictionary<T,T>。

Dictionary<T,T>是HashTable的泛型版本,存取同樣快,但是不需要裝箱和拆箱了。而且,其優(yōu)化了算法,Hashtable是0.72,它的浪費容量少了很多。

Dictionary<string,Person> Dic = new Dictionary<string,Person>();

HashSet<T>

HashSet<T>類,算法,存儲結(jié)構(gòu)都與哈希表相同,主要是設(shè)計用來做高性能集運算的,例如對兩個集合求交集、并集、差集等。集合中包含一組不重復出現(xiàn)且無特定順序的元素。

Queue、Queue<T>

Queue隊列,Queue<T>泛型隊列,大學都學過,隊列,先進先出,很有用。

Stack、Stack<T>

Stack堆棧,先進后出。

SortedList、SortedList<TKey,TValue>

SortedList集合中的數(shù)據(jù)是有序的。可以通過key來匹配數(shù)據(jù),也可以通過int下標來獲取數(shù)據(jù)。

添加操作比ArrayList,Hashtable略慢;查找、刪除操作比ArrayList快,比Hashtable慢。

SortedDictionary<TKey,TValue>

SortedDictionary<TKey,TValue>相比于SortedList<TKey,TValue>其性能優(yōu)化了,SortedList<TKey,TValue>其內(nèi)部維護的是數(shù)組而SortedDictionary<TKey,TValue>內(nèi)部維護的是紅黑樹(平衡二叉樹)的一種,因此其占用的內(nèi)存,性能都好于SortedDictionary<TKey,TValue>。唯一差在不能用下標取值。

ListDictionary(單向鏈表),LinkedList<T>(雙向鏈表)

List<T>,ArrayList,Hashtable等容器類,其內(nèi)部維護的是數(shù)組Array來,ListDictionary和LinkedList<T>不用Array,而是用鏈表的形式來保存。鏈表最大的好處就是節(jié)約內(nèi)存空間。

ListDictionary是單向鏈表。

LinkedList<T>雙向鏈表。雙向鏈表的優(yōu)勢,可以插入到任意位置。

HybridDictionary

HybridDictionary的類,充分利用了Hashtable查詢效率高和ListDictionary占用內(nèi)存空間少的優(yōu)點,內(nèi)置了Hashtable和ListDictionary兩個容器,添加數(shù)據(jù)時內(nèi)部邏輯如下:

當數(shù)據(jù)量小于8時,Hashtable為null,用ListDictionary保存數(shù)據(jù)。

當數(shù)據(jù)量大于8時,實例化Hashtable,數(shù)據(jù)轉(zhuǎn)移到Hashtable中,然后將ListDictionary置為null。

BitArray

BitArray這個東東是用于二進制運算,"或"、"非"、"與"、"異或非"等這種操作,只能存true或false;

應用場景

ArrayList,List<T>:變長數(shù)組;

HashTable,Dictionary<T,T>:頻繁根據(jù)key查找value;

HashSet<T>:集合運算;

Queue、Queue<T>:先進先出;

Stack、Stack<T>:堆棧,先進先出;

SortedList、SortedList<TKey,TValue>:哈希表,要通過下標,又要通過key取值時,可選用;

ListDictionary:單向鏈表,每次添加數(shù)據(jù)時都要遍歷鏈表,數(shù)據(jù)量大時效率較低,數(shù)據(jù)量較大且插入頻繁的情況下,不宜選用。

LinkedList<T>:雙向鏈表;

HybridDictionary:未知數(shù)據(jù)量大小時,可用。

SortedDictionary<TKey,TValue>:SortedList<TKey,TValue>的優(yōu)化版,內(nèi)部數(shù)組轉(zhuǎn)平衡二叉樹。

BitArray:二進制運算時可選用;

以上就是本次介紹的全部知識點內(nèi)容,感謝大家對腳本之家的支持。

相關(guān)文章

  • C#判斷語句的表達式樹實現(xiàn)

    C#判斷語句的表達式樹實現(xiàn)

    這篇文章介紹了C#判斷語句的表達式樹實現(xiàn),文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • C#編程實現(xiàn)統(tǒng)計文件夾內(nèi)文件和隱藏文件的方法示例

    C#編程實現(xiàn)統(tǒng)計文件夾內(nèi)文件和隱藏文件的方法示例

    這篇文章主要介紹了C#編程實現(xiàn)統(tǒng)計文件夾內(nèi)文件和隱藏文件的方法,結(jié)合具體實例形式分析了C#針對文件與目錄的遍歷及屬性操作相關(guān)技巧,需要的朋友可以參考下
    2017-07-07
  • WPF實現(xiàn)XAML轉(zhuǎn)圖片的示例詳解

    WPF實現(xiàn)XAML轉(zhuǎn)圖片的示例詳解

    這篇文章主要為大家詳細介紹了如何利用WPF實現(xiàn)XAML轉(zhuǎn)圖片,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-11-11
  • C#讀取Excel到DataTable的方法示例

    C#讀取Excel到DataTable的方法示例

    這篇文章主要介紹了C#讀取Excel到DataTable的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 深入分析WPF客戶端讀取高清圖片卡以及縮略圖的解決方法詳解

    深入分析WPF客戶端讀取高清圖片卡以及縮略圖的解決方法詳解

    本篇文章是對WPF客戶端讀取高清圖片卡以及縮略圖的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實現(xiàn)同步模式下的端口映射程序

    C#實現(xiàn)同步模式下的端口映射程序

    這篇文章介紹了C#實現(xiàn)同步模式下的端口映射程序,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#實現(xiàn)全局快捷鍵功能

    C#實現(xiàn)全局快捷鍵功能

    這篇文章介紹了C#實現(xiàn)全局快捷鍵功能的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • P/Invoke之C#調(diào)用動態(tài)鏈接庫DLL示例詳解

    P/Invoke之C#調(diào)用動態(tài)鏈接庫DLL示例詳解

    這篇文章主要為大家介紹了P/Invoke之C#調(diào)用動態(tài)鏈接庫DLL示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • C#針對xml文件轉(zhuǎn)化Dictionary的方法

    C#針對xml文件轉(zhuǎn)化Dictionary的方法

    這篇文章主要介紹了C#針對xml文件轉(zhuǎn)化Dictionary的方法,是C#操作XML文件的典型應用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C#二分查找算法

    C#二分查找算法

    這篇文章介紹了C#中的二分查找算法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05

最新評論

巴里| 姚安县| 怀柔区| 鹤壁市| 广宁县| 习水县| 宝丰县| 措美县| 竹山县| 河西区| 金乡县| 凭祥市| 洮南市| 称多县| 乾安县| 阜南县| 简阳市| 汽车| 沙湾县| 衡山县| 沂源县| 广安市| 米脂县| 宁化县| 灌南县| 东明县| 班玛县| 巴中市| 石屏县| 博乐市| 方正县| 阳高县| 河东区| 日土县| 于田县| 镇平县| 华安县| 娄烦县| 永胜县| 鄂托克前旗| 修武县|