• 认识 C# 的 ArrayList


    C# 不支持动态数组,用 ArrayList 可以实现动态数组的功能。


    ArrayList 的名称空间是 System.Collections。

    ArrayList 元素类型

    和数组不同,ArrayList 的各个元素的类型可以不同。

    声明对象

    //声明 ArrayList 有三种重载方法,较常用的有两种
    ArrayList al = new ArrayList();
    ArrayList al = new ArrayList(3);

    上例中,参数值 3 表示容量,即可以容纳多少个元素。

    Capacity 与 Count

    ArrayList 具有 Capacity 和 Count 属性,分别表示容量和数量。

    • Capacity 表示 ArrayList 可包含的元素数;Count 表示实际包含的元素数。
    • Capacity 可读可写;Count 只读。

    当 Capacity 不够时

    我们的 Capacity 如果小了,无法容纳我们实际的元素个数,这时再增加元素时:

    如果指定了 Capacity,Capacity 将按指定的 Capacity 的倍数增长(如果 Capacity 小于 2,将按 2 的倍数增长),比如指定了 Capacity 为 3,那么将按 3、6、9、12、15、18 ……线性的方式增长,直到可以容纳实际的元素个数。

    如果没有指定 Capacity 值,Capacity 将按 2、4、8、16、32、64 ……指数的方式增长,直到可以容纳实际的元素个数。

    Capacity 不会自动缩小

    当 Capacity 被自动增大后,即使删除了某些元素,Capacity 也不会自动缩小,需要设置 Capacity 来缩小,注意 Capacity 不能小于当前 Count。

    这里介绍一些 ArrayList 常用的代码,都是望名生义,不再举例。

    获取元素值

    object value = al[index]; //al 为 ArrayList 对象,一般需要再对 value 进行类型转换,比如:int n = (int)value;

    设置元素值

    al[index] = value; //al 为 ArrayList 对象,index 必须小于 Count

    追加元素

    int ArrayList.Add(object value) 返回添加的元素的索引

    插入元素

    void ArrayList.Insert(int index, object value)

    删除元素

    删除元素后,后面的元素会前移,但 Capacity 不会变化。

    void ArrayList.Remove(object obj) 从前(索引 0)往后查找,删除找到的第一个和 obj 相同的元素
    void ArrayList.RemoveAt(int index) 删除索引 index 对应的元素
    void ArrayList.RemoveRange(int index, int count) 从索引 index 开始,删除 count 个元素

    查找元素

    int ArrayList.IndexOf(object value) 从前(索引 0)往后查找,返回找到的第一个和 obj 相同的元素的索引
    int ArrayList.IndexOf(object value, int startIndex)
    int ArrayList.IndexOf(object value, int startIndex, int count)
    int ArrayList.LastIndexOf(object value) 从后往前(索引 0)查找,返回找到的第一个和 obj 相同的元素的索引
    int ArrayList.LastIndexOf(object value, int startIndex)
    int ArrayList.LastIndexOf(object value, int startIndex, int count)

    相关亩?/STRONG>

  • 相关阅读:
    C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法
    C# LINQ查询表达式用法对应Lambda表达式
    C# WPF 通过委托实现多窗口间的传值
    C# WPF 父控件通过使用可视化树找到子控件
    OpenCV打开摄像头闪退问题
    C#调用pyd
    微信支付(JSAPI、小程序)开发流程记录
    在安装pymysql遇到的问题
    个人理解的python的面向对象
    关于python3.4 MD5
  • 原文地址:https://www.cnblogs.com/puzi0315/p/2604030.html
Copyright © 2020-2023  润新知