Array
定義:
public abstract class Array:ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuraEquatable
數(shù)組在內(nèi)存中是連續(xù)存儲的,,所以它的索引速度是非常的快,而且賦值與修改元素也很簡單
- string[] s = new string[3];
- //賦值
- s [0] = "a";
- s [1] = "b";
- s [2] = "c";
- //修改
- s [0] = "a1";
數(shù)組在倆數(shù)據(jù)中插入數(shù)據(jù)是很麻煩的,,還有我們在聲明數(shù)組的時候,,必須同時指明數(shù)組的長度,數(shù)組的長度過長,,會造成內(nèi)存浪費,,數(shù)組和長度過短,會造成數(shù)據(jù)溢出的錯誤,。
ArrayList
ArrayList是.Net Framework提供的用于數(shù)據(jù)存儲和檢索的專用類,,它是命名空間System.Collections下的一部分。它的大小是按照其中存儲的數(shù)據(jù)來動態(tài)擴(kuò)充與收縮的,。所以,,我們在聲明ArrayList對象時并不需要指定它的長度。ArrayList繼承了IList接口,,所以它可以很方便的進(jìn)行數(shù)據(jù)的添加,,插入和移除.比如:
- ArrayList list = new ArrayList ();
- //新增數(shù)據(jù)
- list.Add ("abc");
- list.Add (123);
- //修改數(shù)據(jù)
- list [2] = 345;
- //移除數(shù)據(jù)
- list.RemoveAt (0);
- //插入數(shù)據(jù)
- list.Insert (0, "hello world");
ArrayList存在不安全類型與裝箱拆箱的缺點:
在list中,我們不僅插入了字符串"abc",,而且又插入了數(shù)字123,。這樣在ArrayList中插入不同類型的數(shù)據(jù)是允許的。因為ArrayList會把所有插入其中的數(shù)據(jù)都當(dāng)作為object類型來處理,。這樣,,在我們使用ArrayList中的數(shù)據(jù)來處理問題的時候,很可能會報類型不匹配的錯誤,,也就是說ArrayList不是類型安全的,。既使我們保證在插入數(shù)據(jù)的時候都很小心,都有插入了同一類型的數(shù)據(jù),,但在使用的時候,,我們也需要將它們轉(zhuǎn)化為對應(yīng)的原類型來處理,。這就存在了裝箱與拆箱的操作,會帶來很大的性能損耗,。
List
List類是ArrayList類的泛型等效類(ArrayList繼承了List接口)。它的大部分用法都與ArrayList相似,,因為List類也繼承了IList接口,。最關(guān)鍵的區(qū)別在于,在聲明List集合時,,我們同時需要為其聲明List集合內(nèi)數(shù)據(jù)的對象類型,。
- List<int> list = new List<int>();
- //新增數(shù)據(jù)
- list.Add(123);
- //修改數(shù)據(jù)
- list[0] = 345;
- //移除數(shù)據(jù)
- list.RemoveAt(0);
拓展
ArrayList list1 = new ArrayList ();
這句創(chuàng)建了一個ArrayList的對象后把上溯到了List。此時list是一個List對象了,,有些ArrayList有但是List沒有的屬性和方法,,它就不能再用了。而ArrayList list=new ArrayList();創(chuàng)建一對象則保留了ArrayList的所有屬性,。
問題就在于List有多個實現(xiàn)類,,如LinkedList或者Vector等等,現(xiàn)在你用的是ArrayList,,也許哪一天你需要換成其它的實現(xiàn)類呢,?,這時你只要改變這一行就行了:List list = new LinkedList(); 其它使用了list地方的代碼根本不需要改動,。假設(shè)你開始用 ArrayList list = new ArrayList(), 這下你有的改了,,特別是如果你使用了 ArrayList特有的方法和屬性。如果沒有特別需求的話,最好使用List list = new LinkedList(); 便于程序代碼的重構(gòu). 這就是面向接口編程的好處,。