zoukankan      html  css  js  c++  java
  • 给数组扩容的几种方式

    假设有一个规定长度的数组,如何扩容呢?最容易想到的是通过如下方式扩容:

        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                int[] arrs = new[] {1, 2, 3, 4, 5};
    
                arrs[5] = 6;
    
            }
    
        }

    报错:未处理IndexOutOfRanageException,索引超出了数组界限。

     

    □ 创建一个扩容的临时数组,然后赋值给原数组,使用循环遍历方式

            static void Main(string[] args)
    
            {
    
                int[] arrs = new[] {1, 2, 3, 4, 5};
    
                int[] temp = new int[arrs.Length + 1];
    
                //遍历arrs数组,把该数组的元素全部赋值给temp数组
    
                for (int i = 0; i < arrs.Length; i++)
    
                {
    
                    temp[i] = arrs[i];
    
                }
    
                //把临时数组赋值给原数组,这时原数组已经扩容
    
                arrs = temp;
    
                //给扩容后原数组的最后一个位置赋值
    
                arrs[arrs.Length - 1] = 6;
    
                foreach (var item in arrs)
    
                {
    
                    Console.WriteLine(item);
    
                }
    
                Console.ReadKey();
    
            }
    

     

    □ 创建一个扩容的临时数组,然后赋值给原数组,使用Array的静态方法

    像这种平常的数组间的拷贝,Array类肯定为我们准备了静态方法:Array.Copy()。

            static void Main(string[] args)
    
            {
    
                int[] arrs = new[] {1, 2, 3, 4, 5};
    
                int[] temp = new int[arrs.Length + 1];
    
                Array.Copy(arrs, temp, arrs.Length);
    
                //把临时数组赋值给原数组,这时原数组已经扩容
    
                arrs = temp;
    
                //给扩容后原数组的最后一个位置赋值
    
                arrs[arrs.Length - 1] = 6;
    
                foreach (var item in arrs)
    
                {
    
                    Console.WriteLine(item);
    
                }
    
                Console.ReadKey();
    
            }
    
      

    □ 使用Array的静态方法扩容

    但是,拷贝来拷贝去显得比较繁琐,我们也可以使用Array.Resize()方法给数组扩容。

            static void Main(string[] args)
    
            {
    
                int[] arrs = new[] {1, 2, 3, 4, 5};
    
                Array.Resize(ref arrs, arrs.Length + 1);
    
                //给扩容后原数组的最后一个位置赋值
    
                arrs[arrs.Length - 1] = 6;
    
                foreach (var item in arrs)
    
                {
    
                    Console.WriteLine(item);
    
                }
    
                Console.ReadKey();
    
            }
    

     

    总结:数组扩容优先考虑使用Array的静态方法Resize,其次考虑把一个扩容的、临时的数组赋值给原数组。

  • 相关阅读:
    【Java】快速排序、归并排序、堆排序、基数排序实现总结
    【Java】二分查找、插值查找、斐波那契查找的实现,及分析
    【Java】Java实现常见的七种排序
    【C】常见的排序
    栈,迷宫问题
    海量数据处理问题
    【C】 布隆过滤器BloomFilter
    哈希变形---位图
    C实现Hash表,链式结构
    C实现Hash表,开放定址法
  • 原文地址:https://www.cnblogs.com/darrenji/p/3978150.html
Copyright © 2011-2022 走看看