上一篇博客介绍了Dictionary,这篇博客介绍List的相关内容。

C#中要存储一组数据。我们会想到数组Array,ArrayList,List这三个对象,当中,数组是最早出现的,我们就从数组開始吧。

数组有非常多长处,数组的使用比較简单,而且数组在内存中是连续存储的。所以数据存取速度比較快。

定义一个数组Array:

//定义、赋值

<span style="font-size:18px;">	    int[] intTest = new int[3];
intTest[0] = 1;
intTest[1] = 2;
intTest[2] = 3; //改动
intTest[1] = 5;</span>

可是,数组有非常多缺陷,比方说,它的长度就是个大坑,我们在定义数组的时候必须指定数组长度,假设长度过长则浪费内存。假设过短。会编译错误,出现溢出现象,假如我们事先不知道数组的长度,那使用起来简直是坑爹。

而且,数据不能删除数据,要插入一条数据。也是相当的困难。

针对数组的这些问题。C#推出了ArrayList。能够说,ArrayList完美的攻克了数组的种种缺陷。

ArrayList是System.Collections;命名空间下的集合类,我们在定义ArrayList时,不须要去指定它的长度,它的长度能够在执行时动态改变来满足实际须要。

ArrayList继承了IList接口。能够方便的进行数据加入、改动、插入、删除操作。代码例如以下:

<span style="white-space:pre">	</span>    //定义、加入数据
ArrayList arrayList = new ArrayList();
arrayList.Add(1);
arrayList.Add(2);
arrayList.Add(3);
//改动
arrayList[0] = "5";
//删除
arrayList.RemoveAt(0);
//插入数据
arrayList.Insert(0, 555);

ArrayList的存储结构是跟数组的存储结构同样,也是连续存储,所以数据查询和加入速度比較快,可是删除速度比較慢,由于连续存储的数据改变了当中的一个记录,就须要改变整个数组的索引,这个是比較麻烦的。

ArrayList能够说非常好的攻克了数组的缺陷,可是它也不是完美的。大家细致观察上边的代码,会发现,我们给实例arrayList对象的第一个索引值是int类型的1,可是改动数据时,我们改成了string类型的5,也就是说。arrayList
这个对象中,既有int类型数据。也包含string类型数据。那我们在使用的时候,岂不是每次都要去推断呢?假如,我们又多加入了几种类型呢?程序肯定会报错。

假如说。我们就是在程序中做了无数的推断,但是系统中装箱、拆箱的操作也能把人折磨死,而且,对内存是一种极大的消耗。

C#2.0泛型的出现。非常好的攻克了这个问题。ArrayList的类型安全为程序带来了极大的隐患,List要求在定义的时候必须给出明白的数据类型,所以,List是强类型的集合,而且,泛型的出现。避免了数据交换和存储时装箱和拆箱的操作,极大的降低了内存的损耗。它的使用方法和arrayList基本同样。代码例如以下:

<span style="white-space:pre">	</span>    //定义、加入数据
List<string> listTest = new List<string>();
listTest.Add("a");
listTest.Add("b");
listTest.Add("c");
//改动
listTest[1] = "abc";
//移除
listTest.RemoveAt(0);
//插入数据
listTest.Insert(0, "Hello World!");

总结:

数组:数组能够多维度的存储数据。在内存中已顺序表结构存储,通过索引下表来查找数据,查询效率高。数据操作方便。可是,长度固定,数据插入困难,假设须要以多维数据结构存储时推荐使用。

ArrayList:数组的强化版本号。长度可变化,内存中已顺序表结构存储,通过索引查找数据,查询效率高,继承了IList接口,数据操作简单。类型不安全。数据查询和存储时须要经过装箱和拆箱操作,内存浪费较大,不建议使用。

List:ArrayList的泛型版本号。强类型数据集合,数据操作简单,内存中已链式存储结构存在,能够通过索引查询数据,查询效率较高,操作一般集合时建议使用。

容器使用笔记(List篇)的更多相关文章

  1. 《javascript权威指南》读书笔记——第二篇

    <javascript权威指南>读书笔记——第二篇 金刚 javascript js javascript权威指南 今天是今年的196天,分享今天的读书笔记. 第2章 词法结构 2.1 字 ...

  2. 《javascript权威指南》读书笔记——第一篇

    <javascript权威指南>读书笔记——第一篇 金刚 javascript js javascript权威指南 由于最近想系统学习下javascript,所以开始在kindle上看这本 ...

  3. IOC容器特性注入第一篇:程序集反射查找

    学习kooboo的框架发现它的注入容器方法比较特别,同样是利用MVC的注入点,但它是查找网站下面bin所有的DLL利用反射查找特性找到对应的服务注入到容器. 这样的好处很简单:完全可以不用关心IOC容 ...

  4. PHP学习笔记 - 进阶篇(11)

    PHP学习笔记 - 进阶篇(11) 数据库操作 PHP支持哪些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Syba ...

  5. PHP学习笔记 - 进阶篇(10)

    PHP学习笔记 - 进阶篇(10) 异常处理 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被 ...

  6. PHP学习笔记 - 进阶篇(9)

    PHP学习笔记 - 进阶篇(9) 图形图像操作 GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库提供的一系列API,可以对图像进行处理或者直接生成新 ...

  7. PHP学习笔记 - 进阶篇(8)

    PHP学习笔记 - 进阶篇(8) 日期与时间 取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间与日期的一个很重要的概念,它表示从 1970年1月1日 0 ...

  8. PHP学习笔记 - 进阶篇(7)

    PHP学习笔记 - 进阶篇(7) 文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $conte ...

  9. PHP学习笔记 - 进阶篇(6)

    PHP学习笔记- 进阶篇(6) 会话控制(session与cookie) 当前的Cookie为: cookie简介 Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据. ...

  10. PHP学习笔记 - 进阶篇(4)

    PHP学习笔记 - 进阶篇(4) 字符串操作 字符串介绍 PHP开发中,我们遇到最多的可能就是字符串. 字符串变量用于包含字符串的值. 一个字符串 通过下面的3种方法来定义: 1.单引号 2.双引号 ...

随机推荐

  1. python导包一不小心就入坑(常用解决办法)

    常见导包报错: - ImportError:No module named - SystemError: Parent module '' not loaded, cannot perform rel ...

  2. ansible2.7学习笔记系列

    写在前面:ansible的资料网上很多,本人也是参考网上资料,做总结,如有错误,麻烦指出,谢谢. 所谓学习笔记,就是不断成长的过程,也许一段时间后有更深入理解了,就会继续更新笔记. 笔记定位:目前写的 ...

  3. Redis进阶例子

    工作中用到的RabbitMQ例子 , 但是最后没有用 , 用的CMQ , 顺便说下CMQ社区真的少 , 并且功能少 . 一.消息体 package com.bootdo.common.rabbitmq ...

  4. struts2中关于jsp页面向action传值出现乱码问题

    在JSP页面输入中文并传给后台的时候,常常会出现乱码问题,产生乱码的原因:java在进行传值的时候,默认用的是iso-8859-1的编码形式进行传输,而我们jsp页面常用的则是utf-8的编码形式.所 ...

  5. RTSP详解

    关于 RTSP. RTSP协议是一个非常类似HTTP协议的流控制协议.它们都使用纯文本来发送信息,而且rtsp协议的语法也和HTTP类似.Rtsp一开始这样设计,也是为了能够兼容使用以前写的HTTP协 ...

  6. 896. Monotonic Array@python

    An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is mono ...

  7. 【Java】Class文件编译的版本号与JDK版本号的对应关系

    查看方式 使用文本编辑器EmEditor以16进制方式打开.class文件 图中红框中的代表版本号52.0 次版本号:00 00   (小数点后面的部分) 主版本号:00 34   (小数点前面的部分 ...

  8. Centos7 使用firewall管理防火墙

    一.Centos7使用firewall的管理防火墙 1.firewalld基本使用 启动:systemctl start firewalld 关闭:systemctl stop firewalld 状 ...

  9. HTML5表单新增元素与属性

    form属性 在html4中,表单的从属元素必须写在表单内部,而在HTML5中,可以把他们书写在任何地方,然后为该元素指定一个form属性,属性值为该表单的id,这样就可以声明该元素从属于指定表单了. ...

  10. HTML+CSS 制作HTML5标志图

    效果图如下:(是用代码写的,而不是图片!) 网上看到的代码. 看了下,就是CSS的transform属性的应用.加上定位等.组合在一起形成图片. 没什么难点,就是width,left等数据得根据HTM ...