C#--数组和集合
C#在存儲(chǔ)數(shù)據(jù)的時(shí)候,是需要先聲明一個(gè)數(shù)組的,當(dāng)然還可以使用集合。那么數(shù)組與集合有什么區(qū)別,為什么有了數(shù)組還需要集合呢?
一、數(shù)組:
定義:數(shù)組是相同數(shù)據(jù)類(lèi)型的元素按一定順序排列的集合。
優(yōu)點(diǎn):數(shù)組在存儲(chǔ)數(shù)據(jù)的時(shí)候是連續(xù)存儲(chǔ)的,因此可以快速而容易地從頭到尾遍歷元素,可以快速的修改元素等等。
缺點(diǎn):在聲明數(shù)組的時(shí)候必須先聲明指定的長(zhǎng)度。如果事先不知道存儲(chǔ)的大小,很容易會(huì)造成聲明的長(zhǎng)度過(guò)長(zhǎng)導(dǎo)致內(nèi)存空間浪費(fèi),過(guò)短則造成數(shù)據(jù)的溢出。而且在兩個(gè)數(shù)據(jù)中間插入數(shù)據(jù)也是非常麻煩的,需要將插入位置后面的數(shù)組全部移動(dòng)位置。
二、集合:
定義:ArrayList是命名空間System.Collections下的一部分,它是使用大小可按需動(dòng)態(tài)增加的數(shù)組實(shí)現(xiàn)IList接口。ArrayList的默認(rèn)初始容量為0,隨著元素添加到ArrayList中,容量會(huì)根據(jù)需要通過(guò)重新分配自動(dòng)增加。
優(yōu)點(diǎn):ArrayList 可以根據(jù)使用大小按需動(dòng)態(tài)增加,不用事先設(shè)置大小,可以隨意的添加數(shù)據(jù),插入或移除某一范圍元素也比較方便。
缺點(diǎn):因?yàn)锳rrayList 插入值的類(lèi)型都是當(dāng)做Object 類(lèi)型插入的,所以當(dāng)調(diào)用數(shù)據(jù)的時(shí)候可能會(huì)出現(xiàn)類(lèi)型不匹配的錯(cuò)誤。
三、總結(jié):
(1)數(shù)組是一種非常有用的數(shù)據(jù)結(jié)構(gòu),但是數(shù)組也具有很多的局限性:首先,數(shù)組元素的數(shù)據(jù)類(lèi)型必須是相同的,其次,在創(chuàng)建數(shù)組時(shí)必須確定元素個(gè)數(shù)。數(shù)組一旦創(chuàng)建,其大小就是固定的。想調(diào)整其大小或者增加新的元素都是比較困難的。特別是,當(dāng)對(duì)象的個(gè)數(shù)未知,并且隨時(shí)可能要循環(huán)、添加和移除時(shí),數(shù)組會(huì)很不方便。
(2)集合是通過(guò)高度結(jié)構(gòu)化的方式存儲(chǔ)任意對(duì)象的類(lèi),它可以把一組類(lèi)似的對(duì)象組合在一起。與無(wú)法動(dòng)態(tài)調(diào)整大小的數(shù)組相比,集合不僅能隨意調(diào)整大小,而且為存儲(chǔ)或檢索某個(gè)對(duì)象提供了更多的方法。例如,由于Object是所有數(shù)據(jù)類(lèi)型的基類(lèi),因此任何類(lèi)型的對(duì)象(包括任何值類(lèi)型或引用類(lèi)型數(shù)據(jù))都可被組合到一個(gè)Object類(lèi)型的集合中,并通過(guò)C#的foreach語(yǔ)句來(lái)訪問(wèn)來(lái)訪問(wèn)其中的每一個(gè)對(duì)象。當(dāng)然,對(duì)于一個(gè)Object類(lèi)型的集合來(lái)說(shuō),可能需要單獨(dú)對(duì)個(gè)元素執(zhí)行附加的處理,例如,裝箱、拆箱或轉(zhuǎn)換等。
另外:
1、數(shù)組:同一類(lèi)型,固定長(zhǎng)度;集合:不同類(lèi)型,不固定長(zhǎng)度。
2、要使用集合,必須先引用命名空間:using System.Collections;
3、集合的一些方法:
Add()向集合中添加一個(gè)元素;
Remove()刪除集合中的一個(gè)元素 ;
RemoveAt(int i)刪除集合中索引值為i的元素 ;
Reverse()反轉(zhuǎn)集合的元素 ;
Sort()以從小到大的順序排列集合的元素 ;
Clone()復(fù)制一個(gè)集合。
4、Hashtable:哈希表,碼-值對(duì)(key-value),類(lèi)似于字典(比數(shù)組更強(qiáng)大)。哈希表是經(jīng)過(guò)優(yōu)化的,訪問(wèn)下標(biāo)的對(duì)象先散列過(guò)。如果以任意類(lèi)型鍵值訪問(wèn)其中元素會(huì)快于其他集合。GetHashCode()方法返回一個(gè)int型數(shù)據(jù),使用這個(gè)鍵的值生成該int型數(shù)據(jù)。哈希表獲取這個(gè)值最后返回一個(gè)索引,表示帶有給定散列的數(shù)據(jù)項(xiàng)在字典中存儲(chǔ)的位置。
5、單線程程序中推薦使用?Dictionary,?有泛型優(yōu)勢(shì),?且讀取速度較快,?容量利用更充分。多線程程序中推薦使用?Hashtable,默認(rèn)的Hashtable允許單線程寫(xiě)入,多線程讀取,對(duì)?Hashtable?進(jìn)一步調(diào)用?Synchronized()?方法可以獲得完全線程安全的類(lèi)型。而?Dictionary?非線程安全,必須人為使用?lock?語(yǔ)句進(jìn)行保護(hù),效率大減。
總結(jié)
- 上一篇: C#--字符串操作
- 下一篇: c# char unsigned_dll