這一節我們來學習集合,什麼是集合呢? 集合就如同數組,用來存儲和管理一組特定類型的數據對象,除了基本的數據處理功能,集合直 接提供了各種數據結構及算法的實現,如隊列、鏈表、排序等,可以讓你輕易地完成復雜的數據操作。在使用數組和集合時要先加入 system.collections命名空間,它提供了支持各種類型集合的接口及類。集合本身上也是一種類型,基本上可以將其作為用來存儲一組數據對 象的容器,由於c#面向對象的特性,管理數據對象的集合同樣被實現成為對象,而存儲在集合中的數據對象則被稱為集合元素。這裡提到了接 口這個概念,它也是面向對象編程進化的重要標准,我們在這裡不做過多的講解,先注重學習集合中的對象及其使用就可以了,下面我們來學 習第一種集合:
動態數組ArrayList.ArrayList類提供了繼承了IList接口。什麼是繼承呢?這也是面向對象語言的重要特點之一,現在你們先把它理解為, 如果一個對象繼承了類或接口,那麼它也具有了這個類和接口中的方法、屬性,可以用這些繼承的方法和屬性來做相應的操作,比如:數組增 加元素沒有Add()方法,但是動態數組ArrayList繼承了一個增加元素有Add()方法的接口,那麼當它要增加元素的時候,不僅可以用索引, 也可以用繼承下來的Add()方法了。隨著學習的深入,我會給大家再具體講解繼承的概念和使用繼承的好處。那麼下面讓我們來看看動態數組 所繼承的這個接口IList它有什麼特性呢?
Ilist接口:定義了利用索引訪問集合對象的方法,還繼承了ICollection和IEnumerable接口,除實現了接口原有的方法成員外,其本身也 定義多個專門的方法成員,例如新增、移除、在指定位置插入元素或是返回特定元素在集合中所在的位置索引,這些方法主要為集合對象提供 類似數組的元素訪問功能。
ILsit接口成員:add、insert、RemoveAt、Remove、contains、Clear、indexof方法,它最大的特色在於提供類 似數組索引的訪問機制。
ArrayList對象是較為復雜的數組。我們可以將它看為擴充了功能的數組,但ArrayList並不等同於數組,與數組相比,它以下功能和區別是 :
1. 數組的容量是固定的,但ArrayList的容量可以根據需要自動擴充。當我們修改了ArrayList的容量時,則可以自動進行內存重新分配和 元素復制,比如往1號索引位插入n個元素,插入後,元素的索引依次向後n個位置排列,它是動態版本的數組類型。
2.ArrayList提供添加、插入或移除某一范圍元素的方法。但是在數組中,只能一次獲取或設置一個元素的值,如利用索引賦值。
3.ArrayList只有一維,而數組可以是多維。
4.ArrayList可以存放任何數據類型的數據,而數組只能存儲同種數據類型的數據。
這種可以存放任何數據類型的機制,我們稱為裝箱,本節課的後半部分我會講解到,現在大家只需要記住,無論是什麼數據類型,只要添加 到動態數組中,都將轉變為Object數據類型,所以在遍歷Arraylist時,要定義一個Object類型的變量,用來接收遍歷它的每個項的值。
如何聲明一個動態數組呢?
ArrayList AL=new ArrayList( Capacity );//初始容量capacity也是可以不寫的
原因就是即使不在初識化確定容量,容量不夠的時候,會自動的按倍數作擴充。
接下來我們來看一下動態數組的常用屬性
Capacity 獲取或設置ArrayList可包含的元素數。
Count 獲取ArrayList中實際包含的元素數。
IsReadOnly 獲取一個值,該值表示ArrayList是否為只讀。
Item 獲取或設置指定索引處的元素。
動態數組的常用方法
增加元素-AL.Add(value);利用Add方法增加集合元素值
修改元素-AL[Index]=value;利用索引的方式修改元素的值
插入元素-AL.Insert(Index,value);將元素的值value,插入到第Index位置 。
刪除元素-AL.Clear(); 全部刪除集合中的元素
AL.Remove(value);按照集合元素值刪除元素
AL.RemoveAt(Index);按照集合的元素索引刪除元素
縮減容量-AL.TrimToSize();將集合的容量減少到實際元素個數的大小