二,动态数组
1,什么是动态数组
动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
2,ArrayList类常用的属性
属性 | 描述 |
---|---|
Capacity | 获取或设置ArrayList可以包含的元素个数 |
Count | 获取ArrayList中实际包含的元素个数 |
IsFixedSize | 获取一个值,表示ArrayList是否具有固定大小 |
IsReadOnly | 获取一个值,表示ArrayList是否只读 |
Item | 获取一个值,表示ArrayList是否具有固定大小 |
3,优点
1、支持自动改变大小的功能
2、可以灵活的插入元素
3、可以灵活的删除元素
4,和list的区别(缺点)
在arraylist中,我们可以存放不同类型的数据,可以是整型、字符串等,因为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。例子
5,ArrayList类常用的方法
方法名 | 描述 |
---|---|
public virtual int Add(object value); | 在ArrayList的末尾添加一个对象。 |
public virtual void AddRange(ICollection c); | 在ArrayList的末尾添加ICollection的元素。 |
public virtual void Clear(); | 从ArrayList中移除所有的元素。 |
public virtual bool Contains(object item); | 判断某个元素是否在ArrayList中。 |
public virtual ArrayList GetRange( int index, int count); | 返回一个ArrayList,表示源 ArrayList 中元素的子集。 |
public virtual int IndexOf(object); | 返回某个值在ArrayList中第一次出现的索引,索引从零开始。 |
public virtual void Insert( int index, object value ); | 在ArrayList的指定索引处,插入一个元素。 |
public virtual void InsertRange(int index,ICollection c ); | 在ArrayList的指定索引处,插入某个集合的元素。 |
public virtual void Remove( object obj ); | 从ArrayList中移除第一次出现的指定对象。 |
public virtual void RemoveAt( int index ); | 移除ArrayList的指定索引处的元素。 |
public virtual void RemoveRange( int index, int count ); | 从ArrayList中移除某个范围的元素。 |
public virtual void Reverse(); | 逆转ArrayList 中元素的顺序。 |
public virtual void SetRange(int index,ICollection c); | 复制某个集合的元素到ArrayList中某个范围的元素上。 |
public virtual void Sort(); | 对ArrayList中的元素进行排序。 |
public virtual void TrimToSize(); | 设置容量为ArrayList中元素的实际个数。 |
ArrayList list = new ArrayList();
list.Add("12");
Console.WriteLine(list.Capacity);
Console.WriteLine(list.Count);
Console.WriteLine(list[0]);
list.AddRange(new int[] { 2, 3, 5,0 });
Console.WriteLine(list.Count);
Console.WriteLine(list.Contains(12));
list.Remove("12");
Console.WriteLine(list.Count);
list.RemoveAt(0);
Console.WriteLine(list.Count);
Console.WriteLine(list.Capacity);
list.TrimToSize();
Console.WriteLine(list.Capacity);
list.Clear();
Console.WriteLine(list.Count);
返回结果如下: