ArrayList类可以视作是Array与Collection对象的结合,可以理解为Array的优化版本。该类既有数组的特征又有集合的特性,例如,既可以通过下标进行元素访问,对元素排序、搜索,又可以像处理集合一样添加、在指定索引插入及删除元素,还可以根据需要自动扩充容量。

由于ArrayList中元素的类型默认为object类型,因此,在获取集合元素时需要进行强制类型转换。并且object是引用类型,在与值类型进行转换时,会引起装箱和拆箱的操作,需要付出一些性能代价。

ArrayList类的属性和方法如下:

ArrayList的属性

Count:返回目前ArrayList包含的实际元素的数量,这个属性是只读的。
Capacity:指定ArrayList能够包含的最大数量,可以手动的设置这个属性,可以包含元素的个数,默认为16。
Item:可以通过索引器的方式访问元素。

ArrayList的方法

Add:用于添加一个元素到当前列表的末尾。
AddRange:用于添加一批元素到当前列表的末尾。
Insert:用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange:用于从指定位置开始添加一批元素,列表后面的元素依次往后移动。
Remove:用于删除一个元素,通过元素本身的引用来删除。
RemoveAt:用于删除一个元素,通过索引值来删除。
RemoveRange:用于删除一批元素,通过指定开始的索引和删除的数量来删除。
IndexOf:返回某个元素的索引。
Clear:用于清除现有所有的元素。
Contains:用来检查给定元素是否在数组之中。

这里要区分Capacity和Count的不同,前者指容量,后者是数量。容量是指最多可以存储多少个元素,数量是指真正存储了多少个元素,ArrayList的容量和数量都是可以改变的。就像一只杯子,其容量为一升,表时可以存储一升,但不一定要装满,装半杯水也可以。那么这半杯水相当于Count,一升水相当于Capacity。一般ArrayList的容量Capacity会大于或等于Count值,如果添加的元素超过容量,容量的值会增加一倍。

ArrayList属性的使用实例

using System;

using System.Collections;
class Program
{
static void Main()
{
    ArrayList list = new ArrayList();
    Console.WriteLine("Capacity:{0}", list.Capacity);
    Console.WriteLine("Count:{0}", list.Count);
}
}

从运行结果可以看出:当前list的容量为3,由于没有添加任何元素,元素的数量为0。

注意:使用ArrayList之前一定要在using区添加了System.Collections。

注意:ArrayList只能是一维的,声明ArrayList对象时必须实例化,不能像数组那样声明时直接赋值。ArrayList把所有的元素都当做对象引用,因此,可以在ArrayList中存储任何想要存储的对象,在访问这些数据时,需要进行数据的类型转换。

C#非泛型集合类-ArrayList数组集合类相关推荐

  1. [C#]泛型与非泛型集合类的区别及使用例程,包括ArrayList,Hashtable,ListT,DictionaryTkey,Tvalue,SortedListTkey,Tvalue,...

    今天有空正好把泛型和非泛型集合类写了一个比较,并做了个的例程,可以比较清楚的理解它们概念和使用方法. 泛型与非泛型集合类在C#程序中是非常重要的一个基础概念,这里列一个表来进行对比: 非泛型集合类 泛 ...

  2. java面试题29 牛客 以下关于集合类ArrayList、LinkedList、HashMap描述

    java面试题29 牛客 以下关于集合类ArrayList.LinkedList.HashMap描述错误的是() A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或 ...

  3. Java集合类ArrayList线程不安全验证和解决

    1.ArrayList 线程不安全验证 验证Demo: /*** 集合类ArrayList线程不安全验证** @author wangjie* @version V1.0* @date 2019/12 ...

  4. 非线程安全类ArrayList出现异常:java.util.ConcurrentModificationException

    今天执行了一段<图解多线程设计模式>中的代码,结果抛出了如下的异常: Exception in thread "ReaderThread" java.util.Conc ...

  5. C# 中泛型与非泛型?(摘)

    我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类 ...

  6. C#高性能低GC 非托管动态扩容数组

    开始之前 相比固定长度的Array,大家可能在编程的时候经常会使用List<T>,同时可能会经常往里面Add东西,因为List具有可扩容性,但是注重GC的朋友会发现(比如Unity开发者) ...

  7. 扩展方法必须在非泛型静态类中定义

    扩展方法必须在非泛型静态类中定义: public class CustomerHelperClass{public static MvcHtmlString CreateImage(string p_ ...

  8. java 数组正则表达式_java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】...

    本文实例讲述了java正则表达式实现提取需要的字符并放入数组.分享给大家供大家参考,具体如下: 这里演示java正则表达式提取需要的字符并放入数组,即arraylist数组去重复功能. 具体代码如下: ...

  9. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。(js代码)

    1.题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的 ...

最新文章

  1. OpenCV(项目)二维码识别(二维码、条形码)
  2. jdbctemplate oracle xml文件,Spring JDBCTemplate使用JNDI数据源
  3. 嵌套向量中断控制器NVIC和系统控制块SCB特性
  4. MySQL读取Binlog日志常见的3种错误
  5. 读javascript百炼成仙笑死笔记一
  6. Android Studio 安装配置问题总结
  7. [剑指offer][JAVA]面试题第[30]题[包含min函数的栈][双栈辅助栈][单栈]
  8. 阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点
  9. linux 查看所有端口号_linux系统:ss命令
  10. R语言_驾驶员事故预测
  11. centos7切换root为mysql_Linux(centos 7)系统下mysql8及以上版本修改root账户密码
  12. MVC中将list转化成json 并处理时间格式
  13. Atitit attilax擅长项目解析与大数据采集提取 词法分析 电话号码提取 package vcfvcardprj; import java.util.Collection; imp
  14. ubuntu上常用的软件安装
  15. 《微观动机与宏观行为》精髓:个人的微观动机,是如何影响宏观行为结果的?
  16. VLFeat vs2015 vc++ 64位操作系统 配置 运行(Win7,Win10)
  17. java 字符串限制长度吗_[Java教程]限制字符串长度
  18. 数据库 schema含义
  19. 163邮箱登录跳转php源码,网易等邮箱网页登陆源代码.doc
  20. 技巧 | 清理电脑垃圾

热门文章

  1. 几个比较好用的Windows API在C#中的用法。
  2. 分配性质是什么意思_苏教版六年级数学上册3.9按比分配问题(1)微课视频 | 练习...
  3. vim 撤销上一步操作_Linux笔记(4):vim入门
  4. iOS 9音频应用开发基础教程(大学霸内部资料)
  5. linux内存管理与设计,深入理解Linux内存管理机制(一)
  6. python invalid type promotion_17个新手常见Python运行时错误
  7. 2010 模板下载 罗斯文_俄罗斯人过年必看电影 | 新年枞树 @鱼子酱字幕组
  8. 微软网站打不开_强烈建议收藏,微软出了自家「协作白板」应用
  9. c语言20字节的内存的数据怎么读取_C++编程-内存对齐
  10. Vmware 下安装Arch Linux