C#數(shù)據(jù)類型

數(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):
??鏈表的元素只能一個接著一個訪問,這可能需要較長的時間來查找鏈表的中間或查找順序的尾部

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • YAML 基礎(chǔ) 它的基本語法規(guī)則如下: 1、大小寫敏感2、使用縮進(jìn)表示層級關(guān)系3、縮進(jìn)時不允許使用Tab鍵,只允許...
    祁恩達(dá)閱讀 7,947評論 0 5
  • 2019.2.23 天氣:晴 早上9點(diǎn)多才起,應(yīng)了那句太陽都照到屁股了。 今日節(jié)目: 1早飯:大米湯 白菜炒肉 ...
    此處填名字閱讀 112評論 0 0
  • 花開千年,夢斷余生, 人言可慶錦瑟年華; 菊有花黃,秋韻如畫, 卻說數(shù)不盡璀璨人生。 風(fēng)漸起,卷起漫漫黃沙, 看天...
    輕輕飄過閱讀 250評論 1 3
  • 從小到大讀過的書不計其數(shù),其中不乏經(jīng)典之作,美國女作家瑪格麗特-米切爾寫的《飄》是其中之一,以前讀過無數(shù)次,為了寫...
    梅勝雪閱讀 1,502評論 59 72

友情鏈接更多精彩內(nèi)容