欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#入门教程之集合ArrayList用法详解

程序员文章站 2023-11-24 12:39:58
本文实例讲述了c#入门教程之集合arraylist用法。分享给大家供大家参考,具体如下: .net framework提供了用于数据存储和检索的专用类,这些类统称集合。这...

本文实例讲述了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();
    }
  }
}

C#入门教程之集合ArrayList用法详解

集合的创建

对于简单的数组来说,只有用固定的大小来初始化数组,才能使用它。

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#相关内容感兴趣的读者可查看本站专题:《c#字符串操作技巧总结》、《c#数组操作技巧总结》、《c#中xml文件操作技巧汇总》、《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》及《c#面向对象程序设计入门教程

希望本文所述对大家c#程序设计有所帮助。