- C#程序設計自學經典
- 楊光
- 2064字
- 2021-03-19 17:22:24
4.4 ArrayList類
ArrayList是命名空間System.Collections的子集,在使用該類時必須引用其命名空間,同時ArrayList繼承了IList接口,提供了數據存儲和檢索。ArrayList對象的大小是按照其中存儲的數據來動態擴充與收縮的。所以,在聲明ArrayList對象時并不需要指定它的長度。
4.4.1 ArrayList類的聲明與初始化
聲明ArrayList可以使用如下三種方法。
(1)使用ArrayList類的默認構造方法來聲明ArrayList,語法如下:
ArrayList arrayList=new ArrayList();
使用此種方式聲明的ArrayList將以默認16的大小來初始化內部的數組。
(2)從繼承自ICollection接口的指定集合復制元素到ArrayList,并且ArrayList具有與所復制的元素數相同的初始容量,語法如下:
ArrayList arrayList=new ArrayList(arrayName);
其中,arrayName為要添加集合的數組名。
(3)用指定的大小初始化內部數組,其語法如下:
ArrayList arrayList=new ArrayList(count);
其中,count為為ArrayList對象分配的空間大小。
4.4.2 ArrayList的使用
1.ArrayList的屬性及其方法
ArrayList的屬性及其方法與之前學習的數組相比要多得多。使用上也比數組要靈活得多。如表4-1所示為ArrayList的屬性及其方法。
表4-1 ArrayList的屬性及其方法

續表

2.ArrayList元素的添加
向ArrayList添加元素時可以使用ArrayList類的Add方法和Insert方法,下面將分別對這兩種方法進行講解。
1)Add方法
此方法將對象添加到ArrayList的結尾處,是最常用的方法之一,此方法將把添加的元素作為Object的對象添加。其返回值為int類型,為ArrayList的索引值。ArrayList允許把null添加至ArrayList中,并且允許添加重復的元素。例4-3演示了使用Add方法將整型添加至ArrayList,并輸出其元素值。
例4-3:ArrayList的Add方法(ConsoleArrayListAddMethod)
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleArrayListAddMethod { class Program { static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add(1); list.Add(9); list.Add(3); list.Add(7); list.Add(0); list.Add(88); foreach (int i in list) { Console.WriteLine(i); } Console.ReadLine(); } } }
運行結果如圖4-3所示。

圖4-3 ArrayList的Add方法
2)Insert方法
Insert方法將元素插入ArrayList的指定索引處。其方法如下:
public virtual void Insert( int index, Object value )
其中,index是從零開始的索引,應在該位置插入value。
value為要插入的Object對象,該值可以為null。
例4-4演示了使用Insert方法將元素添加至ArrayList,并輸出其元素值。
例4-4:ArrayList的Insert方法(ConsoleArrayListInsertMethod)
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleArrayListInsertMethod { class Program { static void Main(string[] args) { string[] strs = new string[] { "Hello,", "World!\n", "Hello, ", "China!\n" }; ArrayList list = new ArrayList(strs); Console.WriteLine("原始數據為:"); foreach (string str in list) { Console.Write(str); } Console.WriteLine(); list.Insert(4, "Hello,"); list.Insert(5, "Kitty!\n"); list.Insert(6, "Hello,"); list.Insert(7, "KuGou!\n"); Console.WriteLine("使用Insert方法添加后的數據為:"); for (int i = 0; i < list.Count; i++) { Console.Write(list[i].ToString()); } Console.WriteLine(); Console.ReadLine(); } } }
運行結果如圖4-4所示。

圖4-4 ArrayList的Insert方法
關鍵點解析:
list.Insert(4, "Hello,");
此代碼使用Insert方法在ArrayList的對象list的索引位置4處插入“Hello,”字符串,若此時將Insert方法的第一個參數值4改為5或更大值,則程序會報出ArgumentOutOfRangeException異常,根據VS中的異常提示“插入索引已超出范圍。必須為非負值,并且必須小于或等于大小”可知,插入的索引值必須小于等于ArrayList的對象list的大小。
for (int i = 0; i < list.Count; i++)
此句使用了ArrayList對象的Count方法取得ArrayList中包含的元素個數作為循環的限定條件。
Console.Write(list[i].ToString());
此句中使用ArrayList對象的索引形式訪問元素,索引從0開始。
3.ArrayList元素的刪除
在ArrayList中可以使用ArrayList類提供的Clear方法、Remove方法、RemoveAt方法以及RemoveRange方法來刪除元素。下面就分別介紹下這4種方法。
1)Clear方法
Clear方法用于從ArrayList中移除所有元素,其語法格式如下:
public virtual void Clear()
2)Remove方法
Remove方法用于從ArrayList中移除指定對象的第一個匹配項,其語法格式如下:
public virtual void Remove( Object obj )
其中,obj為要從ArrayList中移除的Object對象,該值可以為null。
3)RemoveAt方法
RemoveAt方法用于移除ArrayList的指定索引處的元素。其語法格式如下:
public virtual void RemoveAt( int index )
其中,index為要移除的元素的從零開始的索引。
4)RemoveRange方法
RemoveRange方法用于從ArrayList中移除一定范圍的元素,其語法格式如下:
public virtual void RemoveRange( int index, int count )
其中,index為要移除的元素的范圍從零開始的起始索引,count為要移除的元素數。
例4-5演示了使用以上4種方法來移除ArrayList對象中的元素。
例4-5:ArrayList元素的刪除(ConsoleArrayListDelete)
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleArrayListDelete { class Program { static void Main(string[] args) { int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; ArrayList list = new ArrayList(arr); Console.WriteLine("list中的元素為:"); foreach (int i in list) { Console.Write(i + " "); } list.Remove(2); Console.WriteLine("\n使用Remove方法移除數字2后,list中剩余元素為:"); foreach (int i in list) { Console.Write(i + " "); } list.RemoveAt(5); Console.WriteLine("\n使用RemoveAt方法移除索引值為5的元素后,list 中剩余元素為:"); foreach (int i in list) { Console.Write(i + " "); } list.RemoveRange(3, 2); Console.WriteLine("\n使用RemoveRange方法從索引值為3的元素開始移除 2個元素后,list中剩余元素為:"); foreach (int i in list) { Console.Write(i + " "); } list.Clear(); Console.WriteLine("\n已經使用了Clear方法移除了list中的所有元素!"); Console.ReadLine(); } } }
運行結果如圖4-5所示。

圖4-5 ArrayList元素的刪除
4.ArrayList元素的查找
查找ArrayList的元素時,可使用第2章中講解過的字符串類的同名方法——IndexOf方法和LastIndexOf方法。除此之外還可使用ArrayList類提供的Contains方法。下面就主要介紹Contains方法。
Contains方法用于確定某元素是否在ArrayList中,其語法格式如下:
public virtual bool Contains( Object item )
其中,item為要在ArrayList中查找的Object對象,該值可以為null。
其返回值如果在ArrayList中找到item,則為true;否則為false。下面的例子演示了使用Contains方法判斷ArrayList中是否存在某元素。
例4-6:使用Contains方法判斷ArrayList中是否存在某元素(ConsoleArrayList- ContainsMethod)
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleArrayListContainsMethod { class Program { static void Main(string[] args) { ArrayList list = new ArrayList(); for (int i = 0; i <= 100; i++) { list.Add(i); } Console.WriteLine("list中包含以下元素:"); foreach (int i in list) { Console.Write(i + " "); } string str; while (true) { Console.Write("\n\n請輸入一個正整數(輸入"x"退出循環):"); str = Console.ReadLine(); if (str == "x") break; if (list.Contains(int.Parse(str))) Console.WriteLine("list中包含元素值為{0}的元素!", str); else Console.WriteLine("list中不包含元素值為{0}的元素!", str); } Console.ReadLine(); } } }
運行結果如圖4-6所示。

圖4-6 使用Contains方法判斷ArrayList中是否存在某元素
關鍵點解析:
if (list.Contains(int.Parse(str)))
此句中使用ArrayList對象的Contains方法判斷輸入的值是否在ArrayList中存在,此處要注意的是:因為ArrayList對象list中存儲的是整型數據,而輸入的值為字符串類型,需把其轉為整型進行判斷,否則即使字面值相同,但數據類型不同,判斷結果也為false,這就失去了判斷的意義。
- Visual FoxPro程序設計教程
- Learning Linux Binary Analysis
- PhoneGap Mobile Application Development Cookbook
- HDInsight Essentials(Second Edition)
- Learning Hunk
- Mastering JavaScript High Performance
- Swift細致入門與最佳實踐
- 常用工具軟件立體化教程(微課版)
- Internet of Things with ESP8266
- 匯編語言編程基礎:基于LoongArch
- Python+Tableau數據可視化之美
- 軟件供應鏈安全:源代碼缺陷實例剖析
- Image Processing with ImageJ
- Buildbox 2.x Game Development
- 網絡數據采集技術:Java網絡爬蟲實戰