數(shù)組Array:
數(shù)組是最簡單的數(shù)據(jù)結(jié)構(gòu)其特點(diǎn)為:
??1. 數(shù)組存儲在連續(xù)的內(nèi)存上。
??2. 數(shù)組的內(nèi)容都是相同類型。
??3. 數(shù)組可以直接通過索引訪問。

優(yōu)點(diǎn):
??連續(xù)內(nèi)存上的存儲,通過索引獲取和修改元素非???,其訪問速度是恒定于數(shù)組元素長度無關(guān)。
缺點(diǎn):
??1. 聲明需要指定長度。
??2. 由于是連續(xù)存儲并且指定長度,所以在插入元素上有很大的隱患。
列表ArrayList:
列表是數(shù)組的升級版,其特點(diǎn)為:
??1. ArrayList的長度是自增的,所以沒有主觀意義上的長度定義。
??2. ArrayList可以存儲不同類型的數(shù)據(jù),存入其中的內(nèi)容都轉(zhuǎn)為Object類型處理。
優(yōu)點(diǎn):
??1. 不用考慮類似數(shù)組長度所帶來的拓展性問題
??2. 可以存儲不同類型的數(shù)據(jù)
缺點(diǎn):
??1. 長度的自增并沒有想象中那么完美,具體原來在泛型列表內(nèi)我們詳細(xì)說道。
??2. 因?yàn)榇鎯?shù)據(jù)都轉(zhuǎn)為Object類型,其數(shù)據(jù)的存入取出存在裝箱拆箱風(fēng)險。
??3. 頻繁的結(jié)構(gòu)中間插入刪除操作具體請看泛型
泛型列表List<T>:
泛型列表(以下簡稱泛型)是ArrayList的升級版,其特點(diǎn)為
??1. 在列表的基礎(chǔ)增加類型約束。
??2. 具有同ArrayList一樣的長度自增。
實(shí)現(xiàn)原理:
??列表內(nèi)部維護(hù)一個T類型數(shù)組,該數(shù)組初始值為4,每次超出初始值時,c#會重新創(chuàng)建一個新數(shù)組,數(shù)組長度 = 原數(shù)組長度 * 2 ,該數(shù)組將替換原數(shù)組
優(yōu)點(diǎn):
??1. 包含數(shù)組的特點(diǎn)(因?yàn)槠鋬?nèi)部就是維護(hù)一個數(shù)組),同時其內(nèi)容存儲為單一類型數(shù)據(jù),防止裝箱拆箱風(fēng)險
??2. 具有同ArrayList一樣的長度自增。
缺點(diǎn):
??1. 長度自增所帶來的內(nèi)存空間申請問題,查看泛型源碼時可以發(fā)現(xiàn),自增長度的空間時在其維護(hù)的數(shù)組長度 *2 ,也就以為著當(dāng)我們有6000條數(shù)據(jù)時,其維護(hù)的數(shù)組只有5999長度時,泛型會將其維護(hù)數(shù)組的長度拓展到11998,在更大的數(shù)據(jù)來臨,其空余的長度會越來越大,泛型提供了其定義初始化長度變量Capacity,我們最好能夠定義數(shù)組的時候就定義一個符合應(yīng)用的初始長度值,來協(xié)助泛型幫助我們進(jìn)行更好管理。
??2.頻繁的結(jié)構(gòu)中間插入刪除操作會移動該索引后方所有數(shù)據(jù),如果數(shù)據(jù)需要頻繁的造作中間數(shù)據(jù)時,建議使用鏈表
字典Dictionary<K,T>:
字典以鍵值對類型存儲,學(xué)名為哈希散鏈表,是哈希表的升級版(哈希表的定義就不寫了,跟ArrayList與泛型列表的區(qū)別差不多),其特點(diǎn)為:
??1. 內(nèi)部維護(hù)兩個列表用于鍵值對的查找
??2. 具有同列表一樣的長度自增
實(shí)現(xiàn)原理:
??1. entry結(jié)構(gòu)體 包含哈希值,下個連接索引,key,value
??2. entries[entry] 包含多個entry結(jié)構(gòu)體的數(shù)組
??3. Buckets[int] 哈希桶 用于散列哈希值,該索引會連接到對應(yīng)哈希值的最后一個節(jié)點(diǎn)
優(yōu)點(diǎn):
??1. 鍵值對查找,在進(jìn)行鍵值查找時耗時極小,賦值方便
??2. 長度自增相對方便
缺點(diǎn)
??1. 典型的空間換性能,除了key,value,還會保存哈希值和維護(hù)哈希桶,在存儲大量數(shù)據(jù)的時候會增加內(nèi)存。
??2. 長度自增問題,容量的分布可以參照HashHelpers.primes,在創(chuàng)建字典時,我們可以傳入一個容量值,但實(shí)際使用的容量并非該值。而是使用“不小于該值的最小質(zhì)數(shù)來作為它使用的實(shí)際容量,最小是3?!痹斐煽臻g浪費(fèi)

隊(duì)列Queue<T>:
隊(duì)列包含其特點(diǎn):
??1. 如同排隊(duì)一般,先進(jìn)先出(FIFO),適用于服務(wù)器排隊(duì)等功能
??2. 通過使用Enqueue和Dequeue這兩個方法來實(shí)現(xiàn)對 Queue<T> 的存取。
??3. 存取操作時絕對的,存取后數(shù)據(jù)將會從隊(duì)列內(nèi)移除,注意的是存取操作會影響Count的值,避免直接利用Count進(jìn)行循環(huán)取出
??4. 隊(duì)列的初始容量為32,增長因子為2.0,自增情況下為隊(duì)列當(dāng)前長度 * 增長因子
棧Stack<T>:
棧包含其特點(diǎn):
??1. 后進(jìn)先出(LIFO)的功能
??2. 通過使用Pop和push這兩個方法來實(shí)現(xiàn)對 Stack<T> 的存取。
??3. 存取操作時絕對的,存取后數(shù)據(jù)將會從棧內(nèi)移除,注意的是存取操作會影響Count的值,避免直接利用Count進(jìn)行循環(huán)取出
??4. 棧的初始容量為10,增長因子和自增與隊(duì)列一樣
雙向鏈表LinkedList<T>:

鏈表包含其特點(diǎn):
??1. 鏈表內(nèi)的每一個元素可以鏈接前一個和后一個元素
??2. 雙向列表可以進(jìn)行正序,反序查詢
優(yōu)點(diǎn):
??在進(jìn)行結(jié)構(gòu)中間的插入刪除操作時,只需要修改相鄰元素的屬性即可
缺點(diǎn):
??鏈表的元素只能一個接著一個訪問,這可能需要較長的時間來查找鏈表的中間或查找順序的尾部