幾種常見數(shù)據(jù)結(jié)構(gòu)的使用情景?
Array?? 需要處理的元素數(shù)量確定并且需要使用下標時可以考慮蝉绷,建議使用List<T>
ArrayList? 不推薦使用,建議用List<T>
List<T>? 需要處理的元素數(shù)量不確定時 通常建議使用
LinkedList? 鏈表適合元素數(shù)量不固定枣抱,需要經(jīng)常增減節(jié)點的情況熔吗,2端都可以增減Queue 先進先出的情況
Stack 后進先出的情況
Dictionary 需要鍵值對,快速操作
1.數(shù)組
容量固定佳晶,類型固定
數(shù)組存儲在連續(xù)的內(nèi)存上,順序存儲結(jié)構(gòu)數(shù)組可以直接通過下標訪問桅狠。
int[ ] myInt=new int[2,6,3];
創(chuàng)建一個新的數(shù)組時將在堆 中分配一塊連續(xù)的內(nèi)存空間,來盛放數(shù)量為size 轿秧,類型為所聲明類型的數(shù)組元素中跌。如果類型為 值類型, 則將會有 size 個 未封箱 的 該類型的值被創(chuàng)建菇篡。如果類型 為 引用類型漩符, 則將會有 size個相應(yīng)類型的 引用 被創(chuàng)建。
缺點:由于是連續(xù)存儲驱还,所以在兩個元素之間插入新的元素就變得不方便嗜暴。聲明一個新的數(shù)組時, 必須 指定其長度议蟆,這就會存在一個潛在的問題闷沥,長度過長時,顯然會浪費內(nèi)存咐容,長度過短的時候舆逃,則面臨這溢出的風險。這樣不好戳粒!
2.ArrayList(這個不用路狮,不安全)
容量不固定,類型不固定
ArrayList中插入不同類型的數(shù)據(jù)是允許的享郊。
ArrayList al = new ArrayList { 11, "string", 10.25 };
因為ArrayList會把所有插入其中的數(shù)據(jù)當作為object類型來處理览祖,用ArrayList處理數(shù)據(jù)時,很可能會報類型不匹配的錯誤炊琉,也就是ArrayList不是類型安全的。在存儲或檢索值類型時通常發(fā)生裝箱和取消裝箱操作又活,帶來很大的性能耗損苔咪。
3.List(用這個)
容量不固定,類型固定
在聲明List集合時柳骄,我們同時需要為其聲明List集合內(nèi)數(shù)據(jù)的對象類型团赏。
它的大部分用法都與ArrayList相似,因為List類也繼承了IList接口耐薯。最關(guān)鍵的區(qū)別在于舔清,確保了 類型安全 丝里。
List<int>? myList=new List<int >{11,22,33,66};
4.LinkedList鏈表
鏈表適合 元素數(shù)量不固定 ,需要 經(jīng)常增減節(jié)點 的情況体谒。
和數(shù)組最大的不同之處就是在于鏈表在內(nèi)存存儲的排序上可能是不連續(xù)的杯聚。
這是由于鏈表是通過上一個元素指向下一個元素來排列的,不能通過下標來訪問抒痒。
特點就是存儲在內(nèi)存的空間不一定連續(xù)幌绍,那么鏈表相對于數(shù)組最大優(yōu)勢和劣勢就顯而易見了。
1.向鏈表中插入或刪除節(jié)點無需調(diào)整結(jié)構(gòu)的容量故响。因為本身不是連續(xù)存儲而是靠各對象的指針所決定傀广,所以添加元素和刪除元素都要比數(shù)組要有優(yōu)勢。
2.鏈表適合在需要有序的排序的情境下增加新的元素彩届,這里還拿數(shù)組做對比伪冰,例如要在數(shù)組中間某個位置增加新的元素,則可能需要移動移動很多元素樟蠕,而對于鏈表而言可能只是若干元素的指向發(fā)生變化而已糜值。
3.缺點,由于其在內(nèi)存空間中不一定是連續(xù)排列坯墨,所以訪問時候無法利用下標寂汇,而是必須從頭結(jié)點開始,逐次遍歷下一個節(jié)點直到尋找到目標捣染。所以當需要快速訪問對象時骄瓣,數(shù)組無疑更有優(yōu)勢。
5.Queue<T>
先進先出的線性表耍攘。在Queue這種數(shù)據(jù)結(jié)構(gòu)中榕栏,最先插入在元素將是最先被刪除;反之最后插入的元素將最后被刪除蕾各,
通過使用Enqueue和Dequeue這兩個方法來實現(xiàn)對 Queue的存取扒磁。
6.Stack<T>
后進先出的的線性表
默認容量為10。
使用pop和push來操作式曲。
7.Dictionary<K,T>
字典的實現(xiàn)方式就是哈希表的實現(xiàn)方式妨托,只不過 字典是類型安全的 ,也就是說當創(chuàng)建字典時吝羞,必須聲明key和item的類兰伤。
缺點:以空間換時間,通過更多的內(nèi)存開銷來滿足我們對速度的追求钧排。在創(chuàng)建字典時敦腔,我們可以傳入一個容量值,但實際使用的容量并非該值恨溜。而是使用 “不小于該值的最小質(zhì)數(shù)來作為它使用的實際容量符衔,最小是3
因此找前,我們面臨的情況就是,即便我們新建了一個空的字典判族,那么伴隨而來的是2個長度為3的數(shù)組躺盛。所以當處理的數(shù)據(jù)不多時,還是慎重使用字典為好五嫂,很多情況下使用數(shù)組也是可以接受的颗品。
8.Hashset
這個集合類包含不重復(fù)項的無序列表