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

數(shù)組Array:

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

優(yōu)點(diǎn):
??連續(xù)內(nèi)存上的存儲(chǔ),通過(guò)索引獲取和修改元素非???,其訪問(wèn)速度是恒定于數(shù)組元素長(zhǎng)度無(wú)關(guān)。
缺點(diǎn):
??1. 聲明需要指定長(zhǎng)度。
??2. 由于是連續(xù)存儲(chǔ)并且指定長(zhǎng)度,所以在插入元素上有很大的隱患。

列表ArrayList:

列表是數(shù)組的升級(jí)版,其特點(diǎn)為:
??1. ArrayList的長(zhǎng)度是自增的,所以沒有主觀意義上的長(zhǎng)度定義。
??2. ArrayList可以存儲(chǔ)不同類型的數(shù)據(jù),存入其中的內(nèi)容都轉(zhuǎn)為Object類型處理。
優(yōu)點(diǎn):
??1. 不用考慮類似數(shù)組長(zhǎng)度所帶來(lái)的拓展性問(wèn)題
??2. 可以存儲(chǔ)不同類型的數(shù)據(jù)
缺點(diǎn):
??1. 長(zhǎng)度的自增并沒有想象中那么完美,具體原來(lái)在泛型列表內(nèi)我們?cè)敿?xì)說(shuō)道。
??2. 因?yàn)榇鎯?chǔ)數(shù)據(jù)都轉(zhuǎn)為Object類型,其數(shù)據(jù)的存入取出存在裝箱拆箱風(fēng)險(xiǎn)。
??3. 頻繁的結(jié)構(gòu)中間插入刪除操作具體請(qǐng)看泛型

泛型列表List<T>:

泛型列表(以下簡(jiǎn)稱泛型)是ArrayList的升級(jí)版,其特點(diǎn)為
??1. 在列表的基礎(chǔ)增加類型約束。
??2. 具有同ArrayList一樣的長(zhǎng)度自增。
實(shí)現(xiàn)原理:
??列表內(nèi)部維護(hù)一個(gè)T類型數(shù)組,該數(shù)組初始值為4,每次超出初始值時(shí),c#會(huì)重新創(chuàng)建一個(gè)新數(shù)組,數(shù)組長(zhǎng)度 = 原數(shù)組長(zhǎng)度 * 2 ,該數(shù)組將替換原數(shù)組
優(yōu)點(diǎn):
??1. 包含數(shù)組的特點(diǎn)(因?yàn)槠鋬?nèi)部就是維護(hù)一個(gè)數(shù)組),同時(shí)其內(nèi)容存儲(chǔ)為單一類型數(shù)據(jù),防止裝箱拆箱風(fēng)險(xiǎn)
??2. 具有同ArrayList一樣的長(zhǎng)度自增。
缺點(diǎn):
??1. 長(zhǎng)度自增所帶來(lái)的內(nèi)存空間申請(qǐng)問(wèn)題,查看泛型源碼時(shí)可以發(fā)現(xiàn),自增長(zhǎng)度的空間時(shí)在其維護(hù)的數(shù)組長(zhǎng)度 *2 ,也就以為著當(dāng)我們有6000條數(shù)據(jù)時(shí),其維護(hù)的數(shù)組只有5999長(zhǎng)度時(shí),泛型會(huì)將其維護(hù)數(shù)組的長(zhǎng)度拓展到11998,在更大的數(shù)據(jù)來(lái)臨,其空余的長(zhǎng)度會(huì)越來(lái)越大,泛型提供了其定義初始化長(zhǎng)度變量Capacity,我們最好能夠定義數(shù)組的時(shí)候就定義一個(gè)符合應(yīng)用的初始長(zhǎng)度值,來(lái)協(xié)助泛型幫助我們進(jìn)行更好管理。
??2.頻繁的結(jié)構(gòu)中間插入刪除操作會(huì)移動(dòng)該索引后方所有數(shù)據(jù),如果數(shù)據(jù)需要頻繁的造作中間數(shù)據(jù)時(shí),建議使用鏈表

字典Dictionary<K,T>:

字典以鍵值對(duì)類型存儲(chǔ),學(xué)名為哈希散鏈表,是哈希表的升級(jí)版(哈希表的定義就不寫了,跟ArrayList與泛型列表的區(qū)別差不多),其特點(diǎn)為:
??1. 內(nèi)部維護(hù)兩個(gè)列表用于鍵值對(duì)的查找
??2. 具有同列表一樣的長(zhǎng)度自增
實(shí)現(xiàn)原理:
??1. entry結(jié)構(gòu)體 包含哈希值,下個(gè)連接索引,key,value
??2. entries[entry] 包含多個(gè)entry結(jié)構(gòu)體的數(shù)組
??3. Buckets[int] 哈希桶 用于散列哈希值,該索引會(huì)連接到對(duì)應(yīng)哈希值的最后一個(gè)節(jié)點(diǎn)
優(yōu)點(diǎn):
??1. 鍵值對(duì)查找,在進(jìn)行鍵值查找時(shí)耗時(shí)極小,賦值方便
??2. 長(zhǎng)度自增相對(duì)方便
缺點(diǎn)
??1. 典型的空間換性能,除了key,value,還會(huì)保存哈希值和維護(hù)哈希桶,在存儲(chǔ)大量數(shù)據(jù)的時(shí)候會(huì)增加內(nèi)存。
??2. 長(zhǎng)度自增問(wèn)題,容量的分布可以參照HashHelpers.primes,在創(chuàng)建字典時(shí),我們可以傳入一個(gè)容量值,但實(shí)際使用的容量并非該值。而是使用“不小于該值的最小質(zhì)數(shù)來(lái)作為它使用的實(shí)際容量,最小是3。”造成空間浪費(fèi)

隊(duì)列Queue<T>:

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

棧Stack<T>:

棧包含其特點(diǎn):
??1. 后進(jìn)先出(LIFO)的功能
??2. 通過(guò)使用Pop和push這兩個(gè)方法來(lái)實(shí)現(xiàn)對(duì) Stack<T> 的存取。
??3. 存取操作時(shí)絕對(duì)的,存取后數(shù)據(jù)將會(huì)從棧內(nèi)移除,注意的是存取操作會(huì)影響Count的值,避免直接利用Count進(jìn)行循環(huán)取出
??4. 棧的初始容量為10,增長(zhǎng)因子和自增與隊(duì)列一樣

雙向鏈表LinkedList<T>:

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

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

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

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

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