集合:
集合是一组相互关联的对象,数组也可以看做是集合。集合中的对象称之为元素。
Array类:
Array 类的属性
下表列出了 Array 类中一些最常用的属性:
序号 | 属性&描述 |
1 | IsFixedSize 获取一个值,该值指示数组是否带有固定大小。 |
2 | IsReadOnly 获取一个值,该值指示数组是否只读。 |
3 | Length 获取一个 32 位整数,该值表示所有维度的数组中的元素总数。 |
4 | LongLength 获取一个 64 位整数,该值表示所有维度的数组中的元素总数。 |
5 | Rank 获取数组的秩(维度)。 |
Array 类的方法
下表列出了 Array 类中一些最常用的方法:
序号 | 方法&描述 |
1 | Clear 根据元素的类型,设置数组中某个范围的元素为零、为 false 或者为 null。 |
2 | Copy(Array, Array, Int32) 从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置。长度由一个 32 位整数指定。 |
3 | CopyTo(Array, Int32) 从当前的一维数组中复制所有的元素到一个指定的一维数组的指定索引位置。索引由一个 32 位整数指定。 |
4 | GetLength 获取一个 32 位整数,该值表示指定维度的数组中的元素总数。 |
5 | GetLongLength 获取一个 64 位整数,该值表示指定维度的数组中的元素总数。 |
6 | GetLowerBound 获取数组中指定维度的下界。 |
7 | GetType 获取当前实例的类型。从对象(Object)继承。 |
8 | GetUpperBound 获取数组中指定维度的上界。 |
9 | GetValue(Int32) 获取一维数组中指定位置的值。索引由一个 32 位整数指定。 |
10 | IndexOf(Array, Object) 搜索指定的对象,返回整个一维数组中第一次出现的索引。 |
11 | Reverse(Array) 逆转整个一维数组中元素的顺序。 |
12 | SetValue(Object, Int32) 给一维数组中指定位置的元素设置值。索引由一个 32 位整数指定。 |
13 | Sort(Array) 使用数组的每个元素的 IComparable 实现来排序整个一维数组中的元素。 |
14 | ToString 返回一个表示当前对象的字符串。从对象(Object)继承。 |
ArrayList类:
使用命名空间:
using System.Collections;
下表列出了 ArrayList 类的一些常用的 属性:
属性 | 描述 |
Capacity | 获取或设置 ArrayList 可以包含的元素个数。 |
Count | 获取 ArrayList 中实际包含的元素个数。 |
IsFixedSize | 获取一个值,表示 ArrayList 是否具有固定大小。 |
IsReadOnly | 获取一个值,表示 ArrayList 是否只读。 |
Item | 获取或设置指定索引处的元素。 |
下表列出了 ArrayList 类的一些常用的 方法:
序号 | 方法名&描述 |
1 | public virtual int Add( object value ); 在 ArrayList 的末尾添加一个对象。 |
2 | public virtual void AddRange( ICollection c ); 在 ArrayList 的末尾添加 ICollection 的元素。 |
3 | public virtual void Clear(); 从 ArrayList 中移除所有的元素。 |
4 | public virtual bool Contains( object item ); 判断某个元素是否在 ArrayList 中。 |
5 | public virtual ArrayList GetRange( int index, int count ); 返回一个 ArrayList,表示源 ArrayList 中元素的子集。 |
6 | public virtual int IndexOf(object); 返回某个值在 ArrayList 中第一次出现的索引,索引从零开始。 |
7 | public virtual void Insert( int index, object value ); 在 ArrayList 的指定索引处,插入一个元素。 |
8 | public virtual void InsertRange( int index, ICollection c ); 在 ArrayList 的指定索引处,插入某个集合的元素。 |
9 | public virtual void Remove( object obj ); 从 ArrayList 中移除第一次出现的指定对象。 |
10 | public virtual void RemoveAt( int index ); 移除 ArrayList 的指定索引处的元素。 |
11 | public virtual void RemoveRange( int index, int count ); 从 ArrayList 中移除某个范围的元素。 |
12 | public virtual void Reverse(); 逆转 ArrayList 中元素的顺序。 |
13 | public virtual void SetRange( int index, ICollection c ); 复制某个集合的元素到 ArrayList 中某个范围的元素上。 |
14 | public virtual void Sort(); 对 ArrayList 中的元素进行排序。 |
15 | public virtual void TrimToSize(); 设置容量为 ArrayList 中元素的实际个数。 |
ArrayList类自动扩容。
ArrayList arrList = new ArrayList(3);// stringBuilder // 自动扩容 arrList.Add("qqq"); arrList.Add("aaa"); arrList.Add("bbb"); arrList.Add("zzz"); arrList.Add("mmm");
一些arraylist方法使用示例:
int[] arr = new int[5]{6,2,9,4,5}; for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i]+","); } Console.WriteLine(" "); // 声明一个空数组,并复制 int[] arrays = new int[4]; Array.Copy(arr,arrays,arrays.Length); for (int i = 0; i < arrays.Length; i++) { Console.Write(arrays[i] + ","); } Console.WriteLine(" "); // 数组排序 Array.Sort(arr); for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + ","); } Console.WriteLine(" "); ArrayList arrList = new ArrayList(3);// stringBuilder // 自动扩容 arrList.Add("qqq"); arrList.Add("aaa"); arrList.Add("bbb"); arrList.Add("zzz"); arrList.Add("mmm"); for (int i = 0; i < arrList.Count; i++) { Console.WriteLine(arrList[i]); } Console.Write(" "); // 删除元素 arrList.Remove("aaa"); arrList.Add("fff"); for (int i = 0; i < arrList.Count; i++) { Console.WriteLine(arrList[i]); } Console.Write(" "); // 删除指定索引 arrList.RemoveAt(1); for (int i = 0; i < arrList.Count; i++) { Console.WriteLine(arrList[i]); } Console.Write(" "); // 指定位置添加 arrList.Insert(0,"asdf"); for (int i = 0; i < arrList.Count; i++) { Console.WriteLine(arrList[i]); } Console.Write(" "); // 从索引0开始删到索引2 arrList.RemoveRange(0, 2); for (int i = 0; i < arrList.Count; i++) { Console.WriteLine(arrList[i]); } Console.Write(" "); // 将索引为0到2的元素复制给goods列表 ArrayList goods = arrList.GetRange(0,2); for (int i = 0; i < goods.Count; i++) { Console.WriteLine(goods[i]); } Console.Write(" "); int asdf = goods.Capacity; // 输出6 Console.WriteLine(asdf);
Array 和 ArrayList优缺点:
Array:
优点: 它在内存中是连续的存储的,所以索引速度很快,而且赋值与修改元素也很简单。可以利用偏移地址访问元素,时间复杂度为O(1);可以用折半查找法查找元素,效率高。
缺点: 同时,数组也有很多缺点。数组分配在一块连续的数据空间上,因此分配空间时必须确定大小。空间的连续,也导致了存储效率低,插入和删除元素效率比较低,而且麻烦。如果,要增添一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样,你想删除一个元素,需要移动大量元素去填补被移动的元素。
ArrayList:
优点: 它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除
缺点: 在ArrayList中插入不同类型的数据是允许的。因为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。