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

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);

最后建议——在元素数量可变的情况下不应使用数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值