日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ArrayList、HashTable、List、Dictionary的演化及如何选择使用

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:二進制運算時可選用;

轉載于:https://www.cnblogs.com/zxbzl/p/5849714.html

總結

以上是生活随笔為你收集整理的ArrayList、HashTable、List、Dictionary的演化及如何选择使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 虫族全黄h全肉污文 | 婷婷久久综合网 | 国产日本欧美一区二区 | 欧洲黄色网| 亚洲天堂男 | www.伊人.com| 青娱乐91| 在线免费看a | 国产超碰人人模人人爽人人添 | 精品乱码一区二区三区 | 黄色av一区 | 男朋友是消防员第一季 | 91在现看 | 337p亚洲精品色噜噜噜 | 国产精品网页 | 免费在线观看av的网站 | 亚洲精品视频一区 | 污视频网址 | 丁香婷婷久久 | 97精品熟女少妇一区二区三区 | 在线观看日本一区二区 | 国内精品国产成人国产三级 | 亚洲免费黄色片 | www.四虎.| 亚洲第一大综合区 | 中文一区在线 | 久久久1 | 亚洲精品1区 | 中文字幕第6页 | 国产a大片| 亚洲人无码成www久久 | av直播在线观看 | 国产一级久久 | 亚洲自拍av在线 | 操伊人| 青青草五月天 | 中文字幕中文字幕 | 97视频在线观看免费高清完整版在线观看 | 福利资源导航 | 大尺码肥胖女系列av | 欧美午夜精品理论片a级按摩 | 国产精品一区二区人妻喷水 | 日韩有码中文字幕在线观看 | 黄色网页免费在线观看 | 在线观看免费视频国产 | 娇妻之欲海泛舟无弹窗笔趣阁 | 午夜影院免费体验区 | 久久影业 | 99热欧美| 国产精品99久 | 卡一卡二av | 最新av不卡| 日韩精品在线免费 | 久久中文网 | 丝袜黄色片 | 日韩一区二区三区视频在线 | 永久免费看片 | 黄色三级免费网站 | 被警察猛c猛男男男 | 国产综合无码一区二区色蜜蜜 | 免费视频一区二区 | 成人性生交大片免费卡看 | 操她视频网站 | 使劲插视频 | 成全世界免费高清观看 | 成a人v | 日本高清不卡在线观看 | 国产又粗又大又黄 | 在线免费一区 | 国产污污| 黄色小说在线观看视频 | 日韩中文字幕视频在线观看 | 欧美久久久久久久久中文字幕 | 午夜精品久久久久久久久久久久 | 久久理伦 | 亚洲成人资源 | 国产av电影一区 | 自拍露脸高潮 | 日本精品一区二区在线观看 | 国产裸体视频网站 | 国产成人欧美一区二区三区的 | 欧美黄色一级 | 男女激情在线观看 | 凹凸精品熟女在线观看 | 一级黄色视屏 | 亚洲vs天堂| 国产精品一区久久 | 97国产在线视频 | 狠狠干干干 | 亚洲福利一区二区三区 | 你懂的在线观看视频 | 欧美成人资源 | 永久视频在线观看 | 美女靠逼视频网站 | www日韩欧美 | videos麻豆 | 婷婷在线免费 | 亚洲永久在线观看 | 在线看不卡av |