C#中Array与ArrayList的区别(转载)
C#中经常用到的集合类Array与ArrayList是许多刚接触C#语言的人比较困惑的。这两个对象是比较有用的,而且是在很多地方适用的。这里我转载了一些对Array与ArrayList对象的区别的总结,与大家分享。
主要区别:
一、Array的用法与数组几乎一样,可以看做是数据。在定义的时候需要指定长度;ArrayList的用法与普通集合一样,定义的时候不需要指定长度;
如:Array[] animalArray = new Array[2];
ArrayList animalArrayList = new ArrayList();
二、Array对象在获得元素个数时通过数据的获得方式(Length属性):animalArray.Length;ArrayList对象在获得元素个数时通过集合的获得方式(Count属性):animalArrayList.Count;
三、为Array对象赋值时,通过下标的访问方式:animalArray[1] = new Chicken("鸡鸡一");Array对象通过集合添加的方式赋值:animalArrayList.Add(new Chicken("鸡鸡二"));
以下是针对Array与ArrayList的一个例子,其中包括一个基类Animal和两个继承类Chicken、Cow;当然主要的代码和功能在Program中。这几个类的代码分别为:
Animal类:
using System;
using System.Collections.Generic;
using System.Text;
namespace AnimalConsole
{
public abstract class Animal
{
protected string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Animal()
{
name = "没名字的动物!";
}
public Animal(string newName)
{
name = newName;
}
public void Feed()
{
Console.WriteLine("“{0}” 已经被喂养!",name);
}
}
}
Chicken类:
using System;
using System.Collections.Generic;
using System.Text;
namespace AnimalConsole
{
public class Chicken : Animal
{
public void LayEgg()
{
Console.WriteLine("“{0}” 已经下了一个蛋!",name);
}
public Chicken(string newName) : base(newName)
{
}
}
}
Cow类:
using System;
using System.Collections.Generic;
using System.Text;
namespace AnimalConsole
{
public class Cow : Animal
{
public void Milk()
{
Console.WriteLine("“{0}” 已经被喂奶!",name);
}
public Cow(string newName) : base(newName)
{
}
}
}
Program类:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace AnimalConsole
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("创建一个 Array 类列表集合对象并使用它:");
Animal[] animalArray = new Animal[2];
Cow myCow1 = new Cow("牛牛一");
animalArray[0] = myCow1;
animalArray[1] = new Chicken("鸡鸡一");
foreach (Animal myAnimal in animalArray)
{
Console.WriteLine("动物 “{0}” 已经添加到 Array 类列表集合中,名叫 “{1}”",myAnimal.ToString(),myAnimal.Name);
}
Console.WriteLine("Array 类列表集合包含 {0} 个对象。",animalArray.Length);
animalArray[0].Feed();
((Chicken)animalArray[1]).LayEgg();
Console.WriteLine();
Console.WriteLine("创建一个 ArrayList 类列表集合对象并使用它:");
ArrayList animalArrayList = new ArrayList();
Cow myCow2 = new Cow("牛牛二");
animalArrayList.Add(myCow2);
animalArrayList.Add(new Chicken("鸡鸡二"));
foreach (Animal myAnimal in animalArrayList)
{
Console.WriteLine("动物 “{0}” 已经添加到ArrayList类列表集合中,名叫 “{1}”",myAnimal.ToString(),myAnimal.Name);
}
Console.WriteLine("ArrayList 类列表集合包含 {0} 个对象。",animalArrayList.Count);
((Animal)animalArrayList[0]).Feed();
((Chicken)animalArrayList[1]).LayEgg();
Console.WriteLine();
Console.WriteLine("ArrayList 的附加操作:");
animalArrayList.RemoveAt(0);
((Animal)animalArrayList[0]).Feed();
animalArrayList.AddRange(animalArray);
((Chicken)animalArrayList[2]).LayEgg();
Console.WriteLine("名叫 “{0}” 的动物的索引为 {1}。",myCow1.Name,animalArrayList.IndexOf(myCow1));
myCow1.Name = "牛牛三";
Console.WriteLine("这个动物现在叫: “{0}”",((Animal)animalArrayList[1]).Name);
Console.ReadKey();
}
}
}
运行结果如下图:
一维数组的声明
声明方式为
type [] arrayname=new type[size]
其中type指定了数组的类型,arrayname指定了数组的名称,size为数组的的容量,
例如
int [] intarray=new int[20];//声明一个整数类型的数组,其容量为20
string [] stringarray=new string[10];//声明一个string类型的数组,其初始容量为10
下面我们就通过一个范例来掌握一下一维数组的声明方式,极其几个属性方法
范例一
using system;
namespace consoleapplication1
{
class class1
{
static void main(string[] args)
{
int [] intarray=new int[20];//声明一个整数类型的数组,其容量为20
console.writeline("数组intarray的长度为{0},开始索引值为{1},结束索引值为{2}",intarray.length,intarray.getlowerbound(0),intarray.getupperbound(0));
string [] stringarray=new string[10];//声明一个string类型的数组,其初始容量为10
console.writeline("数组stringarray的长度为{0},开始索引值为{1},结束索引值为{2}",stringarray.length,stringarray.getlowerbound(0),stringarray.getupperbound(0));
console.readline();
}
}
}
运行结果:
数组intarray的长度为20,开始索引值为0,结束索引值为19
数组stringarray的长度为10,开始索引值为0,结束索引值为9
press any key to continue
数组的初始化
当我们声明好了一个数组之后,接着就得初始化数组,我们可以使用两种方法初始化数组
1:int [] arrayname1={1,2,3,4};
2: int [] arrayname2=new int[2];
arrayname2[0]=1;
arrayname2[1]=2;
下面我们就来通过两个范例来掌握初始化一个数组的两个方法
范例1:
using system;
namespace consoleapplication1
{
/// <summary>
/// class1 的摘要说明。
/// </summary>
class class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[stathread]
static void main(string[] args)
{
int [] intarray=new int[9];
intarray[0]=10;
intarray[1]=20;
intarray[2]=30;
intarray[3]=40;
intarray[4]=50;
intarray[5]=60;
intarray[6]=70;
intarray[7]=80;
intarray[8]=90;
console.writeline("以下输出数组intarray的元素:");
for(int i=0;i<intarray.length;i++){
console.write(intarray[i]+" ");
}
console.writeline("\n以下输出数组intarray1的元素:");
int [] intarray1={1,2,3,4,5,6,9};
for(int i=0;i<intarray1.length;i++){
console.write(intarray1[i]+" ");
}
}
}
}
运行结果
数组intarray的长度为20,开始索引值为0,结束索引值为19
数组stringarray的长度为10,开始索引值为0,结束索引值为9
ress any key to continue
范例二:
using system;
namespace consoleapplication1
{
/// <summary>
/// class1 的摘要说明。
/// </summary>
class class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[stathread]
static void main(string[] args)
{
int [] intarray=new int[9];
intarray[0]=10;
intarray[1]=20;
intarray[2]=30;
intarray[3]=40;
intarray[4]=50;
intarray[5]=60;
intarray[6]=70;
intarray[7]=80;
intarray[8]=90;
console.writeline("以下输出数组intarray的元素:");
for(int i=0;i<intarray.length;i++){
console.write(intarray[i]+" ");
}
console.writeline("\n以下输出数组intarray1的元素:");
int [] intarray1={1,2,3,4,5,6,9};
for(int i=0;i<intarray1.length;i++){
console.write(intarray1[i]+" ");
}
arraytest [] at=new arraytest[10];
console.writeline("以下是数组对象at所包含的元素:");
for(int i=0;i<at.length;i++){
at[i]=new arraytest(i+5);
}
for(int i=0;i<at.length;i++){
console.write(at[i].aid+" " );
}
}
}
class arraytest{
int id;
public arraytest(int id){
this.id=id;
}
public int aid{
get{
return id;
}
}
}
}
运行结果
以下输出数组intarray的元素:
10 20 30 40 50 60 70 80 90
以下输出数组intarray1的元素:
1 2 3 4 5 6 9 以下是数组对象at所包含的元素:
5 6 7 8 9 10 11 12 13 14 press any key to continue
foreach的使用方法
范例一
using system;
namespace consoleapplication1
{
/// <summary>
/// class1 的摘要说明。
/// </summary>
class class1
{
static void main(string[] args)
{
int [] intarray=new int[9];
intarray[0]=10;
intarray[1]=20;
intarray[2]=30;
intarray[3]=40;
intarray[4]=50;
intarray[5]=60;
intarray[6]=70;
intarray[7]=80;
intarray[8]=90;
console.writeline("使用foreach方法输出数组intarray的元素:");
foreach(int i in intarray){
console.write(i+" ");
}
}
}
}
运行结果
使用foreach方法输出数组intarray的元素:
10 20 30 40 50 60 70 80 90 press any key to continue
数组的操作
范例一
using system;
namespace consoleapplication1
{
/// <summary>
/// class1 的摘要说明。
/// </summary>
class class1
{
static void main(string[] args)
{
class1 c1=new class1();
int [] intarray=new int[9];
intarray[0]=10;
intarray[1]=20;
intarray[2]=30;
intarray[3]=40;
intarray[4]=50;
intarray[5]=60;
intarray[6]=70;
intarray[7]=80;
intarray[8]=90;
c1.printarray(intarray,"intarray");
array.reverse(intarray);
c1.printarray(intarray,"intarray反转后");
array.sort(intarray);
c1.printarray(intarray,"intarray排序后");
int[] intarray2=new int[9];
array.copy(intarray,intarray2,9);
c1.printarray(intarray2,"intarray2");
}
void printarray(int [] intarray,string str){
console.writeline("以下为{0}的内含元素",str);
foreach(int i in intarray){
console.write(i+"\t");
}
console.writeline();
}
}
}
运行结果
以下为intarray的内含元素
10 20 30 40 50 60 70 80 90
以下为intarray反转后的内含元素
90 80 70 60 50 40 30 20 10
以下为intarray排序后的内含元素
10 20 30 40 50 60 70 80 90
以下为intarray2的内含元素
10 20 30 40 50 60 70 80 90
press any key to continue
矩形数组
范例一
using system;
namespace consoleapplication1
{
/// <summary>
/// class1 的摘要说明。
/// </summary>
class class1
{
static void main(string[] args)
{
string[,]intarray=new string[5,6];
console.writeline("intarray是一个5*6的{0}维数组",intarray.rank);
for(int i=0;i<5;i++){
for(int j=0;j<6;j++){
intarray[i,j]="value"+i.tostring()+j.tostring();
}
}
console.writeline("以下输出intarray的元素:");
for(int i=0;i<5;i++){
console.writeline("以下为第{0}行数组",i);
for(int j=0;j<6;j++){
console.writeline("数组元素intarray[{0},{1}]:{2}",i,j,intarray[i,j]);
}
}
}
}
}
运行结果
intarray是一个5*6的2维数组
以下输出intarray的元素:
以下为第0行数组
数组元素intarray[0,0]:value00
数组元素intarray[0,1]:value01
数组元素intarray[0,2]:value02
数组元素intarray[0,3]:value03
数组元素intarray[0,4]:value04
数组元素intarray[0,5]:value05
以下为第1行数组
数组元素intarray[1,0]:value10
数组元素intarray[1,1]:value11
数组元素intarray[1,2]:value12
数组元素intarray[1,3]:value13
数组元素intarray[1,4]:value14
数组元素intarray[1,5]:value15
以下为第2行数组
数组元素intarray[2,0]:value20
数组元素intarray[2,1]:value21
数组元素intarray[2,2]:value22
数组元素intarray[2,3]:value23
数组元素intarray[2,4]:value24
数组元素intarray[2,5]:value25
以下为第3行数组
数组元素intarray[3,0]:value30
数组元素intarray[3,1]:value31
数组元素intarray[3,2]:value32
数组元素intarray[3,3]:value33
数组元素intarray[3,4]:value34
数组元素intarray[3,5]:value35
以下为第4行数组
数组元素intarray[4,0]:value40
数组元素intarray[4,1]:value41
数组元素intarray[4,2]:value42
数组元素intarray[4,3]:value43
数组元素intarray[4,4]:value44
数组元素intarray[4,5]:value45
press any key to continue