1. 程式人生 > >C# 之 集合ArrayList

C# 之 集合ArrayList

img 必須 () pac range tro 我們 list() 叠代

.NET Framework提供了用於數據存儲和檢索的專用類,這些類統稱集合。

這些類提供對堆棧、隊列、列表和哈希表的支持。大多數集合類實現系統的接口。以下我們主要來講一下ArrayList。



ArrayList是命名空間Systrm.Collections下的一部分。它是使用大小可按需動態添加的數組實現IList接口。

ArrayList的容量是ArrayList能夠保存的元素數。

ArrayList的默認初始容量為0.隨著元素加入到ArrayList中,容量會依據須要通過又一次分配自己主動添加。使用證書索引能夠訪問此集合中的元素。此集合中的索引從零開始。


以下我們先來看一個樣例:

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()      //產牛奶
        {
            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)
        {
            //用數組的方法實現
            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();


            //用集合的方法實現
            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();
            
            
            
        }
    }
}



技術分享

集合的創建

對於簡單的數組來說,僅僅實用固定的大小來初始化數組。才幹使用它。
Animal[] animalArray = new Aimal[2];

而ArrayList集合不須要初始化其大小
ArrayList animalArrayList = new ArrayList();
這個類還有另外兩個構造函數。第一個構造函數把現有的集合作為一個參數,把現有集合的內容拷貝到新實例中;而還有一個構造函數通過一個參數設置集合的容量(capacity)。

這個容量用一個int值指定,設置集合中能夠包括的初始項數。但這並非真實的容量。由於假設集合中的項數超過了這個值,容量就會自己主動添加一倍。



對於ArrayList集合,它沒有現成的項,也沒有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對象的集合(通過多態性賦給Animal對象),所以必須用全部的項進行數據類型轉換:
((Animal)animalArrayList[0]).Feed();
((Chichen)animalArrayList[1]).LayEgg();

我們能夠使用Remove()和RemoveAt()方法刪除項。這兩個方法是在ArrayList類中實現的IList接口的一部分。它們分別依據項的引用或索引從集合中刪除項:
animalArrayList.RemoveAt(0);
animalArrayList.Remove(myCow2);

ArrayList集合能夠用AddRange()方法一次加入好幾個項。這種方法接受帶有ICollection接口的不論什麽對象,包含數組:
animalArrayList.AddRange(animalArray);
AddRange()方法不是ArrayList提供的不論什麽接口的一部分。這種方法專用於ArrayList類,







C# 之 集合ArrayList