简介:
动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
创建 ArrayList 类的对象需要使用该类的构造方法:
构造方法 | 作用 |
---|---|
ArrayList() | 创建 ArrayList 的实例,集合的容量是默认初始容量 |
ArrayList(ICollection c) | 创建 ArrayList 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数相同 |
ArrayList(int capacity) | 创建 ArrayList 的实例,并设置其初始容量 |
下面分别使用 ArrayList 类的构造器创建 ArrayList 实例,代码如下:
ArrayList listl=new ArrayList();
ArrayList list2=new ArrayList(listl);
ArrayList list3=new ArrayList(20);
ArrayList 类的方法和属性:
1,ArrayList 类的属性
属性 | 描述 |
---|---|
Capacity | 获取或设置 ArrayList 可以包含的元素个数。 |
Count | 获取 ArrayList 中实际包含的元素个数。 |
IsFixedSize | 获取一个值,表示 ArrayList 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 ArrayList 是否只读。 |
IsSynchronized | 获取一个值,表示访问 ArrayList 是否同步(线程安全)。 |
Item[Int32] | 获取或设置指定索引处的元素。 |
SyncRoot | 获取一个对象用于同步访问 ArrayList。 |
2,优点
1、支持自动改变大小的功能
2、可以灵活的插入元素
3、可以灵活的删除元素
3,缺点
在arraylist中,我们可以存放不同类型的数据,可以是整型、字符串等,因为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。
4,ArrayList类常用的方法
方法名 | 描述 |
---|---|
Add( object value ) | 在 ArrayList 的末尾添加一个对象。 |
AddRange( ICollection c ) | 在 ArrayList 的末尾添加 ICollection 的元素。 |
Clear() | 从 ArrayList 中移除所有的元素。 |
Contains( object item ) | 判断某个元素是否在 ArrayList 中。 |
GetRange( int index, int count ) | 返回一个 ArrayList,表示源 ArrayList 中元素的子集。 |
IndexOf(object) | 返回某个值在 ArrayList 中第一次出现的索引,索引从零开始。 |
Insert( int index, object value ) | 在 ArrayList 的指定索引处,插入一个元素。 |
InsertRange( int index, ICollection c ) | 在 ArrayList 的指定索引处,插入某个集合的元素。 |
Remove( object obj ) | 从 ArrayList 中移除第一次出现的指定对象。 |
RemoveAt( int index ) | 移除 ArrayList 的指定索引处的元素。 |
RemoveRange( int index, int count ) | 从 ArrayList 中移除某个范围的元素。 |
Reverse() | 逆转 ArrayList 中元素的顺序。 |
SetRange( int index, ICollection c ) | 复制某个集合的元素到 ArrayList 中某个范围的元素上。 |
Sort() | 对 ArrayList 中的元素进行排序。 |
TrimToSize() | 设置容量为 ArrayList 中元素的实际个数。 |
实例:
using System;
using System.Collections;
namespace CollectionApplication
{
class Program
{
static void Main(string[] args)
{
ArrayList al = new ArrayList();
Console.WriteLine("Adding some numbers:");
al.Add(45);
al.Add(78);
al.Add(33);
al.Add(56);
al.Add(12);
al.Add(23);
al.Add(9);
Console.WriteLine("Capacity: {0} ", al.Capacity);
Console.WriteLine("Count: {0}", al.Count);
Console.Write("Content: ");
foreach (int i in al)
{
Console.Write(i + " ");
}
Console.WriteLine();
Console.Write("Sorted Content: ");
al.Sort();
foreach (int i in al)
{
Console.Write(i + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}
执行上面的代码,效果如下:
Adding some numbers: Capacity: 8 Count: 7 Content: 45 78 33 56 12 23 9 Content: 9 12 23 33 45 56 78