zoukankan      html  css  js  c++  java
  • 【CLR Via C#】16 数组

    • 所有的数组都隐式的从System.Array抽象类派生,后者又派生自System.Object
    • 数组是引用类型,所以会在托管堆上分配内存,数组对象占据的内存块包含数组的元素,一个类型对象指针、一个同步块索引和一些额外的成员。
    • 所有的数组都隐式的实现IEnumerable,ICollection和IList接口,只是实现这些接口,而非实现其泛型接口IEnumerable<T>等,其主要是考虑到多维数组和非零基数数组(非零基数是指数组的索引值不从0开始)。在创建一个数组的时候,会自动使数组类型实现IEnumerable<T>等接口。
    • 数组的转型条件必须是维数和并需存在一个隐式或显示的转换。如下代码所示
        string [] strArray=new string[]{"luge","luya"}; 
        object[] objArray=strArray;//转换成功
        int [] intArray=new int[]{1,2};
        objArray=intArray;//转换失败
    
    • 零基数组和非零基数组
         对于非零基数组的创建方式如下所示:
        Array intArray=Array.CreateInstance(typeof(Int32),new int[]{5},new int[]{1});
        Console.WriteLine(intArray.GetLowerBound(0));//1
        Console.WriteLine(intArray.GetUpperBound(0));//5
    • 多维数组(Multi-dimension)与交错数组(jagged Array)

      多维数组:一个整体的数组,在内存中占据一整块托管堆内存块

      交错数组:数组元素的维数和大小可以不同,交错数组有时候称为数组的数组。通过二维交错数组为例。其内存分配,通过第一维元素找到相对应的数组元素,如下例子所示,通过arr[0]的指向可以找到new int[5]的数组元素。从这例子中可以看到,对于一个二维且维数为2的交错数组,需要初始化3次数组。这样会产生效率问题。可以看出交错数组的消耗主要在创建和销毁上。
      日常的应用中,如果有多次访问,应该使用交错数组;对于一次访问应该使用多维数组
           //声明
            int[][] arr = new int[2][];
            // 初始化元素
            arr[0] = new int[5] { 1, 3, 5, 7, 9 };
            arr[1] = new int[4] { 2, 4, 6, 8 };    
  • 相关阅读:
    Spring三大器
    SpringBoot启动过程
    linux常用命令
    Controller当中的参数与返回值
    Spring加载context的几种方法
    Spring基础(imooc)
    SpringMVC框架学习
    Spring MVC(imooc)
    springAOP基础
    《别傻了,你的中年危机真不是因为穷》
  • 原文地址:https://www.cnblogs.com/luge/p/ClR_Via_CSharp_Array.html
Copyright © 2011-2022 走看看