ArrayList详解:用法与关键方法
"ArrayList是.NET框架中常用的一种动态数组,属于System.Collections.ArrayList类。它允许在集合中存储对象,提供了灵活的添加、删除和访问元素的方法。ArrayList是基于数组实现的,因此它具有索引访问的特点,但不同于固定大小的数组,ArrayList可以自动调整其容量以适应元素数量的增长。它实现了ICollection和IList接口,这意味着它可以被用作其他集合类的源或目标。 在使用ArrayList时,首先需要创建一个实例,例如: ```csharp ArrayList list = new ArrayList(); ``` 这将创建一个默认初始容量为16的ArrayList。若需指定初始容量,可以通过传递整数参数来创建: ```csharp ArrayList list = new ArrayList(100); // 创建容量为100的ArrayList ``` ArrayList的重要方法包括: 1. `Add(object item)`: 向ArrayList末尾添加一个元素。例如: ```csharp for (int i = 0; i < 10; i++) list.Add(i); ``` 2. `RemoveAt(int index)`: 删除指定索引位置的元素。例如: ```csharp list.RemoveAt(5); // 删除第六个元素 ``` 3. `AddRange(ICollection c)`: 将另一集合的所有元素添加到ArrayList末尾。例如: ```csharp for (int i = 0; i < 3; i++) list.Add(i + 20); ``` 或者使用其他集合: ```csharp ArrayList anotherList = ...; list.AddRange(anotherList); ``` 4. `ToArray(Type t)`: 将ArrayList转换为指定类型的数组。例如: ```csharp Int32[] values = (Int32[])list.ToArray(typeof(Int32)); ``` 这会创建一个新的Int32数组,包含ArrayList中的所有元素。 5. `IsSynchronized` 和 `Synchronized`: `IsSynchronized` 属性用于检查ArrayList是否是线程安全的。默认情况下,ArrayList不是线程安全的。如果需要线程安全的访问,可以使用 `Synchronized` 方法创建一个同步版本的ArrayList: ```csharp ArrayList synchronizedList = ArrayList.Synchronized(list); ``` 使用同步ArrayList时,通常需要配合`lock`语句来确保并发访问的安全性: ```csharp lock (synchronizedList.SyncRoot) { synchronizedList.Add(AddaItem); } ``` 6. `Count` 和 `Capacity`: `Count` 属性表示ArrayList中当前元素的数量,而 `Capacity` 表示ArrayList的实际容量,即已分配的元素空间。当`Count`超过`Capacity`时,ArrayList会自动扩展容量。 7. `AddRange(ICollection c)`, `Remove(object value)`, `RemoveAt(int index)`, `RemoveRange(int index, int count)`, `Insert(int index, object value)` 和 `InsertRange(int index, ICollection c)`: 这些方法分别用于批量添加元素、按值删除元素、按索引删除元素、删除一段范围内的元素、在指定位置插入单个元素以及批量插入元素。 这些基本操作使得ArrayList成为.NET框架中处理可变大小数据集的常用工具。在处理大量数据或需要高效随机访问时,考虑使用更现代的类型,如`List<T>`,它提供了类型安全并且性能通常优于ArrayList。"
1、什么是ArrayList
ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:
动态的增加和减少元素
实现了ICollection和IList接口
灵活的设置数组的大小
2、如何使用ArrayList
最简单的例子:
ArrayList List = new ArrayList();
for( int i=0;i<10;i++ ) //给数组增加10个Int元素
List.Add(i);
//..程序做一些处理
List.RemoveAt(5);//将第6个元素移除
for( int i=0;i<3;i++ ) //再增加3个元素
List.Add(i+20);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组
这是一个简单的例子,虽然没有包含ArrayList所有的方法,但是可以反映出ArrayList最常用的用法
3、ArrayList重要的方法和属性
1)构造器
ArrayList提供了三个构造器:
public ArrayList();
默认的构造器,将会以默认(16)的大小来初始化内部的数组
public ArrayList(ICollection);
用一个ICollection对象来构造,并将该集合的元素添加到ArrayList
public ArrayList(int);
用指定的大小来初始化内部的数组
IsSynchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。
如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步,例如:
ArrayList list = new ArrayList();
//...
lock( list.SyncRoot ) //当ArrayList为非线程包装的时候,SyncRoot属性其实就是它自己,但是为了满足ICollection的SyncRoot定义,这里还是使用SyncRoot来保持源代码的规范性
{
list.Add( “Add a Item” );
}
如果使用ArrayList.Synchronized方法返回的实例,那么就不用考虑线程同步的问题,这个实例本身就是线程安全的,实际上ArrayList内部实现了一个保证线程同步的内部类,ArrayList.Synchronized返回的就是这个类的实例,它里面的每个属性都是用了lock关键字来保证线程同步。
3)Count属性和Capacity属性
Count属性是目前ArrayList包含的元素的数量,这个属性是只读的。
Capacity属性是目前ArrayList能够包含的最大数量,可以手动的设置这个属性,但是当设置为小于Count值的时候会引发一个异常。
4)Add、AddRange、Remove、RemoveAt、RemoveRange、Insert、InsertRange
这几个方法比较类似
Add方法用于添加一个元素到当前列表的末尾
AddRange方法用于添加一批元素到当前列表的末尾
Remove方法用于删除一个元素,通过元素本身的引用来删除
RemoveAt方法用于删除一个元素,通过索引值来删除
RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除
Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动
另外,还有几个类似的方法:
Clear方法用于清除现有所有的元素
Contains方法用来查找某个对象在不在列表之中
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 17
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JSP+SSM科研管理系统响应式网站设计案例
- 推荐一款超级好用的嵌入式串口调试工具
- PHP域名多维查询平台:高效精准的域名搜索工具
- Citypersons目标检测数据集:Yolo格式下载指南
- 掌握MySQL面试必备:程序员面试题解析集锦
- C++软件开发培训:核心技术资料深度解读
- SmartSoftHelp二维码工具:生成与解析条形码
- Android Spinner控件自定义字体大小的方法
- Ubuntu Server on Orangepi3 LTS 官方镜像发布
- CP2102 USB驱动程序的安装与更新指南
- ST-link固件升级指南:轻松更新程序步骤
- Java实现的质量管理系统Demo功能分析与操作
- Everything高效文件搜索工具:快速精确定位文件
- 基于B/S架构的酒店预订系统开发实践
- RF_Setting(E22-E90(SL)) V1.0中性版功能解析
- 高效转换M3U8到MP4:免费下载工具发布