一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - 詳解如何選擇使用ArrayList、HashTable、List、Dictionary數組

詳解如何選擇使用ArrayList、HashTable、List、Dictionary數組

2021-12-10 14:14逆心 C#

本文詳細介紹了ArrayList、HashTable、List、Dictionary的用法,以及什么情況選用該數組,以便提高開發效率。希望對大家有所幫助

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

由于這種限制不方便,所以出現了ArrayList

ArrayList、List<T>

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

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

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

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

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

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

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

HashTable是一種根據key查找非常快的鍵值數據結構,不能有重復key,而且由于其特點,其長度總是一個素數,所以擴容后容量會比2倍大一點點,加載因子為0.72f。

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

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

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

HashSet<T>

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

Queue、Queue<T>

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

Stack、Stack<T>

Stack堆棧,先進后出。

SortedList、SortedList<TKey,TValue>

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

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

SortedDictionary<TKey,TValue>

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

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

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

ListDictionary是單向鏈表。

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

HybridDictionary

HybridDictionary的類,充分利用了Hashtable查詢效率高和ListDictionary占用內存空間少的優點,內置了Hashtable和ListDictionary兩個容器,添加數據時內部邏輯如下:

當數據量小于8時,Hashtable為null,用ListDictionary保存數據。

當數據量大于8時,實例化Hashtable,數據轉移到Hashtable中,然后將ListDictionary置為null。

BitArray

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

應用場景

ArrayList,List<T>:變長數組;

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

HashSet<T>:集合運算;

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

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

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

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

LinkedList<T>:雙向鏈表;

HybridDictionary:未知數據量大小時,可用。

SortedDictionary<TKey,TValue>:SortedList<TKey,TValue>的優化版,內部數組轉平衡二叉樹。

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

以上所述是本文的全部內容,希望對大家有所幫助!

原文鏈接:http://www.cnblogs.com/kissdodog/p/5419986.html

延伸 · 閱讀

精彩推薦
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
主站蜘蛛池模板: blacked亚裔videoshd| 亚洲国产精品一区二区首页 | a男人的天堂久久a毛片 | 大学生按摩黄a级中文片 | 国产自在自拍 | 久久精品视在线观看2 | 小小水蜜桃视频高清在线播放 | 果冻传媒在线播放观看228集 | 欧美在线视频 一区二区 | 91麻豆精品激情在线观看最新 | 99精彩视频在线观看 | a毛片久久免费观看 | 欧美性xxxxx| 日韩 欧美 国产 亚洲 中文 | 日韩中文字幕视频在线观看 | 亚洲黄色免费在线观看 | 亚洲 欧美 国产 综合 在线 | 精品久久久久久影院免费 | 男女男精品视频 | gay中国 | 男人使劲躁女人视频免费 | 欧美特级午夜一区二区三区 | bl文全肉高h湿被灌尿 | 91寡妇天天综合久久影院 | 热99re久久精品国产 | 国产区最新 | www日本在线观看 | 色综合久久六月婷婷中文字幕 | 情缘1完整版在线观看 | 香蕉久草在线 | free性丰满hd性欧美人体 | 亚洲成综合 | 国产福利不卡一区二区三区 | 欧美乱理伦另类视频 | 高清国产激情视频在线观看 | 欧美又黄又激烈真实床戏 | 小小水蜜桃3视频在线观看 小鸟酱喷水 | 国产精品网站在线观看 | 日本中年japanesebear | 逼逼狗影院 | 奇米777四色精品综合影院 |