数组:优点:1.在内存中连续存储,可以快速而容易地从头到尾遍历元素,可以加快修改元素。
缺点:创建时必须制定数组的大小,在两个元素之间添加元素比较困难。
集合:ArrayList是命名空间System.Collections下的一部分,实现Ilist接口。
优点:1.根据使用大小按需动态增加,不用实现设置其大小的控制。
2.可以随意的添加、插入、移除某一范围元素。
缺点:1.ArrayList不管是什么对象都是接受的,所有元素都是Object。
2.执行时,需要明确集合中的元素类型,否则会出现类型不匹配错误。
泛型:1.泛型是具有占位符的类、结构、接口和方法。
2.需要System.Collect.Generic的命名空间,用法上在IList和List
后面加<T>.
优点:List在声明和实例化是都要指定其内部的数据或对象命名空间。
//增加命名空间
using System.Collections;
using System.Collections.Generic;
namespace 附录
{
public partial class Form1 : Form
{
//声明一个集合变量,可以用接口IList,也可以直接声明“ArrayList arraylistAnimal”
IList arraylistAnimal;
//声明一个泛型集合变量,用接口IList,注意IList<Animal>表示此集合变量只能接受Animal类型,其他不可以。
//也可以直接声明“List<Animal> lsitAnimal”
IList<Animal> listAnimal;
//动物报名按钮事件
private void button1_Click(object sender, EventArgs e)
{
//实例化Arraylist对象,注意,此时并没有指定arrayAnimal的大小。这与数组并不相同。
arraylistAnimal = new ArrayList();
//实例化List对象,注意,此时也需要执行List<T>的“T”是Animal
listAnimal = new List<Animal>();
//调用集合的Add方法增加对象,其参数时object,所以new Cat和new Dog都没有问题
arraylistAnimal.Add(new Cat("小花"));
arraylistAnimal.Add(new Dog("阿毛"));
arraylistAnimal.Add(new Dog("小黑"));
listAnimal.Add(new Cat("小花"));
listAnimal.Add(new Dog("阿毛"));
listAnimal.Add(new Dog("小黑"));
//从集合中删除阿毛和小黑
arraylistAnimal.RemoveAt(1);
arraylistAnimal.RemoveAt(1);
listAnimal.RemoveAt(1);
listAnimal.RemoveAt(1);
}
private void button2_Click(object sender, EventArgs e)
{
//此时遍历的ArrayList集合,而非数组
foreach(Animal item in arraylistAnimal)
{
MessageBox.Show(item.Shout());
}
foreach (Animal item in listAnimal)
{
MessageBox.Show(item.Shout());
}
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
//动物类
class Animal
{
protected string name = "";
public Animal(string name)
{
this.name = name;
}
//动物叫的方法
public virtual string Shout()
{
return "";
}
}
//小猫类
class Cat:Animal
{
public Cat(string name)
: base(name)
{ }
public override string Shout()
{
return "我的名字叫" + name;
}
}
//小狗类
class Dog:Animal
{
public Dog(string name)
: base(name)
{ }
public override string Shout()
{
return "我的名字叫" + name;
}
}
}