C#入門教程之集合ArrayList用法詳解
本文實例講述了C#入門教程之集合ArrayList用法。分享給大家供大家參考,具體如下:
.NET Framework提供了用于數(shù)據(jù)存儲和檢索的專用類,這些類統(tǒng)稱集合。這些類提供對堆棧、隊列、列表和哈希表的支持。大多數(shù)集合類實現(xiàn)系統(tǒng)的接口。下面我們主要來講一下ArrayList。
ArrayList是命名空間Systrm.Collections下的一部分,它是使用大小可按需動態(tài)增加的數(shù)組實現(xiàn)IList接口。
ArrayList的容量是ArrayList可以保存的元素數(shù)。ArrayList的默認(rèn)初始容量為0.隨著元素添加到ArrayList中,容量會根據(jù)需要通過重新分配自動增加。使用證書索引可以訪問此集合中的元素。此集合中的索引從零開始。
下面我們先來看一個例子:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections; namespace 集合{ //動物類 public abstract class Animal { protected string name; //動物的名字 public string Name { get { return name; } set { name = value; } } public Animal() { name="The animal with no name"; } public Animal(string newName) { name=newName; } public void Feed() //繁殖后代 { Console.WriteLine("{0} has been fed.",name); } } //奶牛類 public class Cow : Animal { public Cow(string newName): base(newName) { } public void Milk() //產(chǎn)牛奶 { Console.WriteLine("{0} has been milked.", name); } } //母雞類 public class Chicken : Animal { public Chicken(string newName):base(newName) { } public void LayEgg() //下蛋 { Console.WriteLine("{0} has laid an egg.", name); } } class Program { static void Main(string[] args) { //用數(shù)組的方法實現(xiàn) Console.WriteLine("Create an Array type collection of Animal object and use it:"); Animal[] animalArray = new Animal[2]; Cow myCow1 = new Cow("Deirdre"); animalArray[0] = myCow1; animalArray[1] = new Chicken("Ken"); foreach (Animal myAnimal in animalArray ) { Console.WriteLine("New {0} object added to Array collection,Name={1}", myAnimal.ToString(), myAnimal.Name); } Console.WriteLine("Array collection contains {0} objects.",animalArray .Length ); animalArray[0].Feed(); ((Chicken)animalArray[1]).LayEgg(); Console.WriteLine(); //用集合的方法實現(xiàn) Console.WriteLine("Create an ArrayList type collection of Animal objects and use it;"); ArrayList animalArrayList = new ArrayList(); Cow myCow2 = new Cow("HayLey"); animalArrayList.Add(myCow2); animalArrayList.Add(new Chicken("Roy")); foreach (Animal myAnimal in animalArrayList) { Console.WriteLine("New {0} object added to ArrayList collection,Name={1}", myAnimal.ToString(), myAnimal.Name); } Console.WriteLine("ArrayList collection contains {0} objects.", animalArrayList.Count); ((Animal)animalArrayList[0]).Feed(); ((Chicken)animalArrayList[1]).LayEgg(); Console.WriteLine(); } } }
集合的創(chuàng)建
對于簡單的數(shù)組來說,只有用固定的大小來初始化數(shù)組,才能使用它。
Animal[] animalArray = new Aimal[2];
而ArrayList集合不需要初始化其大小
ArrayList animalArrayList = new ArrayList();
這個類還有另外兩個構(gòu)造函數(shù)。第一個構(gòu)造函數(shù)把現(xiàn)有的集合作為一個參數(shù),把現(xiàn)有集合的內(nèi)容復(fù)制到新實例中;而另一個構(gòu)造函數(shù)通過一個參數(shù)設(shè)置集合的容量(capacity)。這個容量用一個int值指定,設(shè)置集合中可以包含的初始項數(shù)。但這并不是真實的容量,因為如果集合中的項數(shù)超過了這個值,容量就會自動增加一倍。
對于ArrayList集合,它沒有現(xiàn)成的項,也沒有null引用的項。我們使用ArrayList對象的Add()方法添加新項:
Cow myCow2 = new Cow("Hayley"); anmialArrayList.Add(myCow2); anmialArrayList.Add(new Chicken("Roy"));
ArrayList對象支持IEnumerable接口,這個接口的唯一方法GetEnuumerator()可以迭代集合中的各項。所以可以與foreach一起使用
foreach (Animal myAnimal in animalArrayList) { Console.WriteLine("New {0} object added to ArrayList collection,Name = {1}",myAnimal.Tostring(),myAnimal.Name); }
ArrayList集合是System.Object對象的集合(通過多態(tài)性賦給Animal對象),所以必須用所有的項進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換:
((Animal)animalArrayList[0]).Feed(); ((Chichen)animalArrayList[1]).LayEgg();
我們可以使用Remove()和RemoveAt()方法刪除項,這兩個方法是在ArrayList類中實現(xiàn)的IList接口的一部分。它們分別根據(jù)項的引用或索引從集合中刪除項:
animalArrayList.RemoveAt(0); animalArrayList.Remove(myCow2);
ArrayList集合可以用AddRange()方法一次添加好幾個項。這個方法接受帶有ICollection接口的任何對象,包括數(shù)組:
animalArrayList.AddRange(animalArray);
AddRange()方法不是ArrayList提供的任何接口的一部分。這個方法專用于ArrayList類,
更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#字符串操作技巧總結(jié)》、《C#數(shù)組操作技巧總結(jié)》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》及《C#面向?qū)ο蟪绦蛟O(shè)計入門教程》
希望本文所述對大家C#程序設(shè)計有所幫助。
相關(guān)文章
C#中IDispose接口的實現(xiàn)及為何這么實現(xiàn)詳解
這篇文章主要給大家介紹了關(guān)于C#中IDispose接口的實現(xiàn)及為何這么實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05C# IQueryable<T>揭開表達(dá)式樹的神秘面紗
這篇文章主要介紹了C# IQueryable<T>表達(dá)式樹,對IQueryable<T>感興趣的同學(xué),必須要仔細(xì)看一下2021-04-04