官术网_书友最值得收藏!

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,這就失去了判斷的意義。

主站蜘蛛池模板: 茂名市| 府谷县| 威远县| 上思县| 安化县| 大宁县| 和林格尔县| 万宁市| 湄潭县| 平谷区| 福清市| 赫章县| 黄骅市| 溧水县| 建瓯市| 昭平县| 彰化县| 榆社县| 阿尔山市| 阳曲县| 利辛县| 宝清县| 波密县| 婺源县| 沧州市| 改则县| 华宁县| 宁城县| 邳州市| 铁岭市| 城固县| 凌云县| 淮安市| 岗巴县| 蓝山县| 兰西县| 杭锦旗| 丹寨县| 松江区| 宝应县| 罗田县|