• C#泛型集合之List


    1、命名空间:
    System.Collections.Generic(程序集:mscorlib)
    2、描述:
      1)、表示可通过索引访问的对象的强类型列表;提供用于对列表进行搜索、排序和操作的方法。
      2)、是ArrayList类的泛型等效类。
      3)、可以使用一个整数索引访问此集合中的元素;索引从 零 开始。
      4)、可以接收null空引用(VB中的Nothing)。
      5)、允许重复元素
    3、创建及初始化:
      List<string> myList = new List<string>();//初始Capacity为 零
      List<string> myList2 = new List<string>(30); //初始Capacity为 30
      List<string> myList3 = new List<string>(new string[] { "1", "a", "2", "b" });//初始Capacity 为 4,并且元素已被复制
    4、Capacity与Count
      1)、Capacity在需要调整大小之前可存储的元素数;Count实际存储的元素数。
      2)、Capacity总是大于或者等于Count
      通过Reflector查看add()方法对Capacity和Count的影响:
      在 List<T>中:
        private T[] items;
        private int _size;
        public int Count{
          get{
            return this._size;
          }
        }
        public int Capacity
        {
          get{
            return this._items.Length;
          }
          set{
            //......
          }
        }
      当我们调用Add方法添加元素的时候,其内部实现为:
      public void Add(T item)
      {
        if(this._size == this._items.Length)
        {
          this.EnsureCapacity(this._size + 1); //扩充Capatity
        }
        this._items[this._size++] = item;
        //.......
      }
      private void EnsureCapacity(int min)
      {
          if (this._items.Length < min)
          {
              int num = (this._items.Length == 0) ? 4 : (this._items.Length * 2);
              if (num < min)
              {
                  num = min;
              }
              this.Capacity = num;
          }
      }
      至此,Capacity和Count之间的异同可以一目了然。
      通过TrimExcess 方法可以使Capacity 等于 Count;
      TrimExcess的内部实现:
      public void TrimExcess()
      {
           int num = (int) (this._items.Length * 0.9);
           if (this._size < num)
           {
                this.Capacity = this._size;
           }
      }
      在这里,我们也可以明白MSDN上的这句话:“如果列表大于容量的 90%,则 TrimExcess 方法将不执行任何操作”。
    5、遍历元素:
      foreach (string s in myList)
      {
          Console.WriteLine(" El: {0}", s);
      }
    6、插入元素 By Insert:
      myList.Insert(index, "VB"); //插入到指定的索引处(index不能大于Capacity-1)
    7、移除元素 By Remove:
      myList.Remove("C#");//移除特定对象的第一个匹配项:如有两个“C#”,则移除一个既索引小的那个。

  • 相关阅读:
    递推最小二乘辨识平面双机械臂Matlab代码
    Matlab Robitic Toolbox学习笔记Day2
    DSP28335与CH340使用心得
    DSP 28335 GPIO输入引脚信号跳变
    DSP 28335 RS485 SCI串口通讯 出错无法进入中断
    DSP 28335 烧写FLASH程序 可以在线仿真 无法离线运行
    CRC16-Modbus 校验 C语言
    C语言 负数转十六进制 电机转速 CANopen命令转换
    CAN转USB 调试助手使用说明
    串的模式匹配 BF算法&KMP算法
  • 原文地址:https://www.cnblogs.com/wwwzzg168/p/3569017.html
Copyright © 2020-2023  润新知