c#的原始碼放在這里了 c#原始碼
不懂的地方就去多扒拉原始碼吧,反正我是好多都看不懂,只能看懂一點點,慢慢學吧!
list
Add 初始容量為0 然后為4 記憶體不夠的時候2倍擴容,這一點和c++vector有點像,所以初始化的時候推薦申請足夠大的記憶體

Insert 吧index后面的元素后移,在index位置插入新元素

Remove 其實底層先遍歷在呼叫的RemoveAt

RemoveAt的底層其實把后面的元素向前移動,真的不清楚這樣的話性能到底怎么樣,估計應該不好

ArrayList
這玩意可以添加任意的型別,其實內部的存盤都是Object型別的,需要進行裝箱和拆箱的操作,雖然它很銀杏,但是非常的耗時啊,

記憶體的擴展機制和List一樣,洗掉也差不多,都是需要移動的,沒啥可說的~

LinkedList
這玩意就是個雙向鏈表,雙向鏈表大家應該都寫過
HashSet
可以理解為集合吧,底層是hash表,而c++的集合底層是紅黑樹
欲與千言,竟又無語凝噎 實在不知道說什么好,也不知道是不是我看的不透徹,反正就是不知道寫點啥好,原始碼發出來了,自己看去吧
HashTable與Dictionary
他倆的區別就像 ArrayList 和 List 的區別
hasttable是的key和value是不需要在定義的時候指定型別的,鍵值可以是任意型別并且支持字串的大小寫,因為他們存盤的都是object型別,并且支持單執行緒寫入多執行緒讀取
Dictionary是需要指定鍵值型別的hashtable,Dictionary 非執行緒安全,
兩者的底層都是hash表實作的
hashtable的內部一個buckets陣列,用來存盤鍵值,陣列的下標通過key用hash演算法得到,

hashtable的擴容:
以最接近當前表長度2倍的素數做為新的hash表的長度

關于dictionary的講解這篇博客比我講的要好多了,大家可以看一看具體的實作程序
點這里
Stack與Queue
stack存盤的是object型別,stack指定存盤型別
堆疊的初始容量是10,如果指定的容量小于10也是默認10

擴容也是2倍

佇列的話默認初始大小為32,默認2.0倍擴增,這些也可以指定

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/251694.html
標籤:其他
上一篇:黑客一些常見的專業術語解釋
下一篇:記一次偶然發現的進度條View
