数组被大部分的语言支持,操作都类似。 如
// 创建 string [] strLanguages = new string[5]; // 赋值 strLanguages[0] = "Java"; strLanguages[1] = "CSharp"; strLanguages[2] = "Python" // 访问 string a = strLanguages[1];
数组的优点在于其是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单,访问快速。 问题: 其插入和删除操作则很费劲,而且在创建时,需要知道其大小。
相对数组来说,ArrayList则解决了数组的问题。可以很灵活地插入和删除。
ArrayList list = new ArrayList(); //新增数据 list.Add("Java"); list.Add("CSharp"); //修改数据 list[2] = 123456; //移除数据 list.RemoveAt(0); //插入数据 list.Insert(0, "hello");
可以看到,ArrayList对数据类型并不严格要求。
下面看看ArrayList的定义
[SerializableAttribute] [ComVisibleAttribute(true)] public class ArrayList : IList, ICollection, IEnumerable, ICloneable { // ...... private Object[] _items; [ContractPublicPropertyName("Count")] private int _size; } //...
可以看到ArrayList中使用object来容纳添加的对象。这里会有装箱,拆箱的操作,造成了性能的损失。
PS: ArrayList并不是所有的.network版本中被支持。
泛型List
public interface IList : ICollection, IEnumerable, IEnumerable
List则避免了ArrayList的对象装箱和拆箱的操作
List list = new List(); //新增数据 list.Add(123); //修改数据 list[0] = 345; //移除数据 list.RemoveAt(0);