您的位置:首页 > 其它

Tip16 元素数量可变的情况下不应使用数组

2017-08-03 16:27 323 查看
Tip16 元素数量可变的情况下不应使用数组

数组一旦被创建,长度就不能改变。如果我们需要一个动态且可变长度的集合,就应该使用ArrayList或List<T>来创建。List<T>是ArrayList的泛型实现,它省去了拆箱和装箱带来的开销。

注:不能肆意对数组指定过大的长度,这会让数组成为一个大对象(占用内存超过85000字节的对象),大对象在回收过程中会带来效率很低的问题。

如果一定要动态改变数组的长度,一种方法是将数组转换为ArrayList或List<T>:

int[] iArr = { 0, 1, 2, 3, 4, 5, 6 };

ArrayList arrayListInt = ArrayList.Adapter(iArr);
arrayListInt.Add(7);

List<int> listInt = iArr.ToList<int>();
listInt.Add(7);


另一种方法(效率很低):是用数组的复制功能,创建一个名为ReSize的扩展方法,具体如下:

public static class ClassForExtensions
{
//
public static Array ReSize(this Array array, int newSize)
{
Type t = array.GetType().GetElementType();
Array newArray = Array.CreateInstance(t, newSize);
Array.Copy(array, 0, newArray, 0, Math.Min(array.Length, newSize));
return newArray;
}
}


调用如下:

//调用:
int[] iArr = { 0, 1, 2, 3, 4, 5, 6 };
iArr = (int[])iArr.ReSize(10);


最后建议——在元素数量可变的情况下不应使用数组
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐