动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
ArrayList 类的方法和属性
常用属性
属性 | 描述 |
---|---|
Capacity | 获取或设置 ArrayList 可以包含的元素个数。 |
Count | 获取 ArrayList 中实际包含的元素个数。 |
IsFixedSize | 获取一个值,表示 ArrayList 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 ArrayList 是否只读。 |
IsSynchronized | 获取一个值,表示访问 ArrayList 是否同步(线程安全)。 |
Item[Int32] | 获取或设置指定索引处的元素。 |
SyncRoot | 获取一个对象用于同步访问 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 中元素的实际个数。 |
实例一
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: 8Count: 7Content: 45 78 33 56 12 23 9Content: 9 12 23 33 45 56 78
实例二
using System;using System.Collections;namespace CollectionApp{class MyComparer : IComparer{public int Compare(object x, object y){// 自定义比较规则// 如果x,y都是int,那么按正常流程比较// 如果其中一个不是int,那么认为不是int的值小// 如果都不是int,那么认为他们相等if (x is int){if (y is int){if ((int)x < (int)y) return -1;if ((int)x == (int)y) return 0;return 1;}return 1;}if (y is int) return -1;return 0;}}class Entry{static void Print(ArrayList l){Console.WriteLine(\"\\t大小能力:{0} 实际大小:{1}\", l.Capacity, l.Count);Console.Write(\"\\t内容:\");foreach (object obj in l)Console.Write(\"{0} \", obj);Console.Write(\"\\r\\n\");}static void Main(){ArrayList l = new ArrayList();Console.WriteLine(\"添加一些不都是Int的数据:\");l.Add(22);l.Add(77);l.Add(\"abc\");l.Add(33);Print(l);Console.WriteLine(\"排序:\");l.Sort(new MyComparer());Print(l);Console.ReadKey();}}}
结果
添加一些不都是Int的数据:大小能力:4 实际大小:4内容:22 77 abc 33排序:大小能力:4 实际大小:4内容:abc 22 33 77