• C# 之 集合ArrayList


    .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类,







  • 相关阅读:
    AOP从静态代理到动态代理 Emit实现
    云计算仿真工具CloudSim介绍和使用
    SSH框架中配置log4j的方法
    SSH常见面试题
    第一章
    shell 生成目录的树状视图、生成文件及子目录的汇总信息
    shell拼写检查,利用Linux字典
    SHELL:多文件的重命名和移动
    sort
    tr1
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6852159.html
Copyright © 2020-2023  润新知