在C#中,如果需要数组的长度和元素的个数随着程序的运行不断改变,就可以使用ArrayList类,该类是一个可以动态增减成员的数组。

一、ArrayList类与Array类的区别

ArrayList类实际上是Array类的优化版本。

ArrayList只能定义一维数组,Arrays可以定义多维数组。

ArrayList的下限始终为0,Array可以定义自己的下限。

ArrayList的元素都是object类型的,因此需要进行装箱和拆箱操作,内存分配的代价很高,而Array的元素通常是特定类型的。

ArrayList的元素个数可以自动扩展,Array的元素个数是固定的。

ArrayList具有添加、删除、插入、移动和复制等方法。

二、示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections; // 导入ArrayList的命名空间
namespace Test
{
class Program
{
static void Main(string[] args)
{
// C#动态数组ArrayList-www.baike369.com
ArrayList alist = new ArrayList();
alist.Add("One"); // 添加对象
alist.Add(" Two");
Console.Write("给数组添加的元素:");
foreach (Object obj in alist)
{ Console.Write(obj); }
Console.WriteLine();
Console.WriteLine("实际包含的数组元素个数:" + alist.Count);
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
alist.Insert(, " c#"); // 在指定的索引位置插入元素C#
Console.Write("在索引值为1的位置插入:");
foreach (Object obj in alist)
{ Console.Write(obj); }
Console.WriteLine();
Console.WriteLine("实际包含的数组元素个数:" + alist.Count);
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
alist.Add("。");
Console.WriteLine("添加。");
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
alist.Add("---"); // 集合容量不够时,会出现位数的变化
Console.WriteLine("添加---");
Console.WriteLine("实际包含的数组元素个数:" + alist.Count);
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
// 用索引方式获取集合元素值
Console.WriteLine("3号索引的:" + alist[]);
// 利用contains方法,查找集合中是否包含“?”
Console.WriteLine("数组中是否包含?:" + alist.Contains("?"));
Console.Write("经过前面操作后的数据元素:");
foreach (Object obj in alist)
{ Console.Write(obj); }
Console.WriteLine();
Console.WriteLine("实际包含的数组元素个数:" + alist.Count);
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
alist.Remove("。"); // 移除集合中的“。”元素
alist.Remove("?"); // 移除集合中的“?”元素
Console.WriteLine("没有包含?,减少1个元素,容量不变");
foreach (Object obj in alist)
{ Console.Write(obj); }
Console.WriteLine();
Console.WriteLine("实际包含的数组元素个数:" + alist.Count);
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
alist.RemoveAt(); // 移除3号索引位的元素
Console.Write("移除3号索引位的元素:");
foreach (Object obj in alist)
{ Console.Write(obj); }
Console.WriteLine();
Console.WriteLine("实际包含的数组元素个数:" + alist.Count);
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
alist.TrimToSize(); // 缩减容量
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
alist.Clear(); // 清除ArrayList中的所有元素
Console.WriteLine("清除ArrayList中的所有元素后:");
Console.WriteLine("实际包含的数组元素个数:" + alist.Count);
Console.WriteLine("目前能够包含的数组元素的最多个数:"+alist.Capacity);
alist.TrimToSize(); // 再次缩减容量
Console.WriteLine("再次缩减容量后,能够包含的数组元素的最多个数:"
+alist.Capacity);
Console.ReadLine();
}
}
}

原博客:http://www.cnblogs.com/melao2006/p/4241678.html

关于C#中的动态数组ArrayList的更多相关文章

  1. (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

    目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...

  2. C#动态数组ArrayList和List<T>的比较

    C#中一维动态数组(即列表)分ArrayList和List<T>两种,其容量可随着我们的需要自动进行扩充 一.ArrayList类(少用) ArrayList位于System.Collec ...

  3. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  4. [数据结构1.2-线性表] 动态数组ArrayList(.NET源码学习)

    [数据结构1.2-线性表] 动态数组ArrayList(.NET源码学习) 在C#中,存在常见的九种集合类型:动态数组ArrayList.列表List.排序列表SortedList.哈希表HashTa ...

  5. C#动态数组ArrayList

    在C#中,如果需要数组的长度和元素的个数随着程序的运行不断改变,就可以使用ArrayList类,该类是一个可以动态增减成员的数组. 一.ArrayList类的常用属性和方法 1. ArrayList类 ...

  6. C# 集合类(一)动态数组ArrayList

    C# 集合类自己经常用到: 数组(Array).动态数组(ArrayList).列表(List).哈希表(Hashtable).字典(Dictionary),对于经常使用的这些数据结构,做一个总结,便 ...

  7. [C] 在 C 语言编程中实现动态数组对象

    对于习惯使用高级语言编程的人来说,使用 C 语言编程最头痛的问题之一就是在使用数组需要事先确定数组长度. C 语言本身不提供动态数组这种数据结构,本文将演示如何在 C 语言编程中实现一种对象来作为动态 ...

  8. 【Azure 环境】Azure Resource Graph Explorer 中实现动态数组数据转换成多行记录模式 - mv-expand

    问题描述 想对Azure中全部VM的NSG资源进行收集,如果只是查看一个VM的NSG设定,可以在门户页面中查看表格模式,但是如果想把导出成表格,可以在Azure Resource Graph Expl ...

  9. 动态数组 - ArrayList

    前言 如果数组的大小要随时间变化,那么数组操作起来就比较麻烦. 在C++中,这种情况要用到动态向量Vector. 而Java中,提供了一种叫做ArrayList的泛型数组结构类型,提供相似的作用. 其 ...

随机推荐

  1. supervisor管理进程工具配置

    Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...

  2. Web大前端面试题-Day10

    1. px和em的区别? px和em都是长度单位; 区别是: px的值是固定的,指定是多少就是多少, 计算比较容易. em得值不是固定的,并且em会继承父级元素的字体大小. 浏览器的默认字体高都是16 ...

  3. Linux查看日志定位问题

    1.定位错误关键字所在行数 cat -n test.log |grep "查找的错误关键字" 2.得到错误关键字所在行号(假设为第500行),查询错误关键字前后100行数据 cat ...

  4. 4826: [Hnoi2017]影魔

    4826: [Hnoi2017]影魔 https://lydsy.com/JudgeOnline/problem.php?id=4826 分析: 莫队+单调栈+st表. 考虑如何O(1)加入一个点,删 ...

  5. centos7 重置root 密码

    重置Centos 7 Root密码的方式和Centos 6完全不同.让我来展示一下到底如何操作. 1 - 在启动grub菜单,选择编辑选项启动 2 - 按键盘e键,来进入编辑界面 3 - 找到Linu ...

  6. tcp keepalive选项

    之前一直对tcp keepalive选项理解有误, 以为通过setsockopt函数设置SO_KEEPALIVE和相关参数后该socket则使用设置的keepalive相关参数 否则使用系统默认的:k ...

  7. index-document-shard

    1.index.shard.document理解: a.每个index包含有多个document,index采用数据路由将document存放在shard中, b.算法(数据路由): shard = ...

  8. IO流(1)—之序列化与反序列化

    1.概念 序列化:把Java对象转换为字节序列的过程称为对象的序列化 反序列化:把字节序列恢复为Java对象的过程称为对象的反序列化 注:只有实现了Serializable和Externalizabl ...

  9. 转载: ASP.NET Core入门系列文章

    今天在网上发现了ithome上的asp.net core 系列文章,对于新手入门还不错,这里转载一下,也方便查阅. [Day01] 從頭開始 [Day02] 程式生命週期 (Application L ...

  10. 【荐】详解 golang 中的 interface 和 nil

    golang 的 nil 在概念上和其它语言的 null.None.nil.NULL一样,都指代零值或空值.nil 是预先说明的标识符,也即通常意义上的关键字.在 golang 中,nil 只能赋值给 ...