ArrayList與HashSet在C#中有什么區別-創新互聯

這篇文章將為大家詳細講解有關 ArrayList與HashSet在C#中有什么區別,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

我們提供的服務有:成都網站建設、成都網站制作、微信公眾號開發、網站優化、網站認證、南靖ssl等。為近千家企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的南靖網站制作公司

在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>的優化版,內部數組轉平衡二叉樹。

關于 ArrayList與HashSet在C#中有什么區別就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

新聞標題:ArrayList與HashSet在C#中有什么區別-創新互聯
分享URL:http://m.kartarina.com/article42/dicghc.html

成都網站建設公司_創新互聯,為您提供商城網站軟件開發品牌網站建設自適應網站網頁設計公司全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 国产在线无码制服丝袜无码| 亚洲AV无码乱码在线观看性色扶| 无码人妻丰满熟妇片毛片| 亚洲AV无码资源在线观看| 日韩视频无码日韩视频又2021| 国产日产欧洲无码视频无遮挡| 国产成人无码精品一区在线观看| a级毛片无码免费真人久久| 中国少妇无码专区| 亚洲美免无码中文字幕在线| 中文字幕乱偷无码AV先锋| 精品无码国产一区二区三区AV| 特级无码a级毛片特黄| 亚洲综合无码AV一区二区 | 久久久久久久久无码精品亚洲日韩| 毛片一区二区三区无码| 久久久久亚洲AV无码专区网站| 亚洲精品无码你懂的| 亚洲精品无码专区久久同性男| 无码中文av有码中文a| 小SAO货水好多真紧H无码视频| 亚洲一级特黄大片无码毛片| 在线播放无码高潮的视频| 曰韩无码二三区中文字幕| 性无码免费一区二区三区在线| 国产成人无码18禁午夜福利p| 人妻老妇乱子伦精品无码专区 | 无码中文字幕日韩专区| 手机在线观看?v无码片| 午夜无码熟熟妇丰满人妻| 国产拍拍拍无码视频免费| yy111111少妇影院里无码| 特级无码a级毛片特黄| 亚洲&#228;v永久无码精品天堂久久 | 国产精品无码素人福利| 麻豆国产精品无码视频| 久久AV高潮AV无码AV| 无码人妻AV免费一区二区三区| 亚洲∧v久久久无码精品| 无码专区久久综合久中文字幕| 手机永久无码国产AV毛片|