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

一、ArrayList类(少用)

  ArrayList位于System.Collections命名空间中,所以我们在使用时,需要导入此命名空间

  ArrayList里边的数据类型是object,它类似于向量,可以存储不同的数据类型在一个数组里边(转换为了object)

  下面是ArrayList的声明:

ArrayList list = new ArrayList();     //声明一个ArrayList动态数组

  

二、List<T>类

  List<T>位于System.Collections.Generic命名空间中,所以我们在使用时,需要导入此命名空间

  List<T>类是 ArrayList 类的泛型(类似于C++中的模板,但不完全相同)等效类并增强了功能,里边是具体的某种类型T,它类似于[]类型的数组,不同的是[]是定长的,而List<T>是长度可变的数组

  泛型的好处:它为使用c#语言编写面向对象程序增加了极大的效力和灵活性,不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以性能得到提高

  在决定使用List<T>还是使用ArrayList类(两者具有类似的功能)时,记住List<T>类在大多数情况下执行得更好并且是类型安全的。如果对List<T>类的类型T使用引用类型,则两个类的行为是完全相同的。但是,如果对类型T使用值类型,则需要考虑实现和装箱问题,在.NET2.0以上List<T>可完全代替ArrayList,也就是说ArrayList已经被淘汰

 用微软的话讲:

    “添加到ArrayList中的任何引用或值类型都将隐式地向上强制转换为Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。”

  1、List<T>的声明

  List<T> list = new List<T>();

  T为动态数组中元素类型,现在以int类型作为例子

List<int> list = new List<int>();    //声明一个元素是int类型的动态数组list

  2、List<T>的初始化

  List<T> list =new list<T> (IEnumerable<T> collection);

以一个集合作为参数初始化List<>,T为动态数组中元素类型,现在以int类型作为例子

int[] temArr = {,,,,,,};
List<int> list = new List<int>(temArr); //用集合里的整数初始化元素是int类型的动态数组list

  3、List<T>的常用方法

    3.1 添加元素

    (1)结尾添加一个元素

list.Add();   //将数字8添加到动态数组list结尾处

    (2)结尾添加一组元素

int[] temArr = {,,,,};
list.AddRange(temArr); //在动态数组list结尾添加temArr集合中的元素

    (3)在指定位置添加一个元素

/*函数原型是Insert(int index,T item);*/
list.Insert(, ); //在动态数组list的第二个位置(下标为1)处插入20

    3.2 删除元素 

    (1)删除一个指定值

list.Remove();   //删除动态数组list中的元素20

    (2)从指定位置删除一个元素    

list.RemoveAt();  //删除动态数组list中下标为1的元素

    (3)从指定位置起删除多个元素

/*函数原型RemoveRange(int index, int count);*/
/* 从下标index开始,删除count个元素 */
list.RemoveRange(, ); //从下标1的元素开始连续删除5个元素

    3.3 遍历List<T>中元素 

foreach (int m in list)
{
Console.WriteLine(m); //遍历打印出动态数组list中的元素
}

    3.4 判断某个元素是否在该List<T>中(很实用)

//判断20是否在动态数组list中,不在则加入
if (list.Contains())
{
Console.WriteLine("There is 20 in the list");
}
else
{
list.Add();
Console.WriteLine("Add 20 successfully.");
}

    3.5 给List<T>里面元素排序

list.Sort();    //对动态数组list中的元素按从小到大(升序)排序
list. Reverse();  //把动态数组list里面元素顺序反转

    3.6 清空List<T>里面的元素

list.Clear();

    3.7 获得List<T>中元素个数

//输出动态数组list中的元素个数
int count = list.Count();
Console.WriteLine("The num of elements in the list: "+count);

C#动态数组ArrayList和List<T>的比较的更多相关文章

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

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

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

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

  3. 关于C#中的动态数组ArrayList

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

  4. C#动态数组ArrayList

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

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

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

  6. 动态数组 - ArrayList

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

  7. 动态数组ArrayList的使用

    1.定义类 package com.realhope.rmeal.bean; /** * * @author Wucy * 菜谱类 */ public class Menu{ private Inte ...

  8. C#深入研究ArrayList动态数组自动扩容原理

    1 void Test1() { ArrayList arrayList = new ArrayList(); ; ; i < length; i++) { arrayList.Add(&quo ...

  9. 常用数据结构-线性表及Java 动态数组 深究

    [Java心得总结六]Java容器中——Collection在前面自己总结的一篇博文中对Collection的框架结构做了整理,这里深究一下Java中list的实现方式 1.动态数组 In compu ...

随机推荐

  1. 【转】What is an entity system framework for game development?

    What is an entity system framework for game development? Posted on 19 January 2012 Last week I relea ...

  2. C# 控件不刷新问题

    /********************************************************************** * C# 控件不刷新问题 * 说明: * 当网络连接出问 ...

  3. 图像金字塔及其在 OpenCV 中的应用范例(下)

    前言 本文将主要讲解如何使用 OpenCV 实现图像分割,这也是图像金字塔在 OpenCV 中的一个重要应用. 关于图像分割 在计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分 ...

  4. cuffdiff 和 edgeR 对差异表达基因的描述

    ASE又走到了关键的一步  要生成能决定是否有差异表达的table. 准备借鉴一下cuffdiff和edgeR 的结果 cuffdiff对差异表达基因的描述: 一共十四列: 第一列, test_id ...

  5. 简单实用的纯CSS百分比圆形进度条插件

    percircle是一款简单实用的纯CSS百分比圆形进度条插件.你不需要做任何设置,只需要按该圆形进度条插件提供的标准HTML结构来编写代码,就可以生成一个漂亮的百分比圆形进度条. 首先要做的就是引入 ...

  6. TensorFlow简单介绍和在centos上的安装

    ##tensorflow简单介绍: TensorFlow™ is an open source software library for numerical computation using dat ...

  7. C陷阱与缺陷 1

    1,符号之间的空白被忽略 符号中间不能嵌入空白 2,词法分析中的贪心法 a---b 和 a-- -b相同 和 a- --b不同 1 a=b/*p //根据贪心法 /*被解释成 注释符,便不再往下读,直 ...

  8. 网站后台的lnmp启动与重启

    网站建立时间很长了,经常挂掉,又没有其他技术人员带.只好自己摸索着修复. 到今天网站已经挂掉了一个礼拜.请求各路大神无果后决定自己修复. 首先出现的是502,网关错误. 1.上阿里云服务用户中心重新启 ...

  9. iOS开发中那些高效常用的宏

    #ifndef MacroDefinition_h #define MacroDefinition_h //-------------------获取设备大小--------------------- ...

  10. poj1984 带权并查集

    题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1. 只要在元素 ...