文档章节

List、Array与ArrayList

shimmerkaiye
 shimmerkaiye
发布于 08/21 18:08
字数 947
阅读 11
收藏 1

数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如:

string[] s=new string[3];
//赋值
 s[0]="a"; s[1]="b"; s[2]="c";
//修改
 s[1]="b1";

但是数组也存在一些不足的地方,比如在两个数据中插入数据,还有我们在声明数组时必须指明数组的长度,过长会是的内存浪费,过短又会造成数据溢出,C#中最先提供了ArrayList来解决这些缺点。

ArrayList是.Net Framework提供的用于数据存储和检索的专用类,它是命名空间System.Collections下的一部分。它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除.比如:

ArrayList list = new ArrayList();
//新增数据
 list.Add("abc"); list.Add(123);
//修改数据
 list[2] = 345;
//移除数据
 list.RemoveAt(0);
//插入数据 
list.Insert(0, "hello world");

从上面实例看,ArrayList好像是解决了所有的缺点,那么它就应该是完美的了,为什么C#2.0后又会出现List呢?

在list中,我们不仅插入了字符串“abc”,而且也插入了数字123。但是这样在ArrayList中是不允许的,因为ArrayList会将所有插入的数据都当做object处理。这样,在我们使用ArrayList中的数据时很可能会出现类型不匹配的错误,也就是说ArrayList不是类型安全的。即使我们在保证插入数据的时候都很小心,都有插入相同类型的数据,但在使用的时候,我们也需要将它转化为对应的类型来处理,这就存在了装箱和拆箱操作,会带来很大的性能损耗。

正是因为ArrayList存在不安全类型与装箱拆箱操作的缺点,所以在C#2.0后出现了泛型的概念。而List类是ArrayList类的泛型等效类。它的大部分用法都和ArrayList相似,因为List类也继承了IList接口。最关键的区别是,在声明List集合时,我们同时也需要为其声明List集合内数据的对象类型。比如:

List<int> list = new List<int>();
//新增数据
 list.Add(123);
//修改数据 
list[0] = 345;
//移除数据
list.RemoveAt(0);

同时,List不能被构造,但可以向上面那样为List创建一个引用,而ArrayList可以被构造,

List list;     //正确   list=null; 
List list=new List();    //   是错误的用法

List list = new ArrayList();这句创建了一个ArrayList对象后把它上溯到了List,此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。而ArrayList list = new ArrayList(),则是创建了一个保留了ArrayList所有属性和方法的对象。

List泛型的好处:通过允许指定泛型类或方法操作的特定类型,泛型功能将类型安全的任务从您转移给了编译器。不需要编写代码来检测数据类型是否正确,因为会在编译的时候强制我们使用相同类型。减少了类型强制转换的需要和运行时错误的可能性。泛型提供了类型安全但没有增加多个实现的开销。

© 著作权归作者所有

共有 人打赏支持
shimmerkaiye
粉丝 1
博文 98
码字总数 36216
作品 0
程序员
私信 提问
C#中的数组类型[],List,Array,ArrayList的区别

using System; using System.Collections; using System.Collections.Generic; namespace SampleList { class CompareArray { public static void CompareContainer() { //[] 的命名空间 Sy......

酷酷小乔
06/26
0
0
java去除List中重复的元素

java去除List中重复的元素 如果用Set ,倘若list里边的元素不是基本数据类型而是对象, 那么请覆写Object的boolean equals(Object obj) 和int hashCode()方法. return new ArrayList(new Hash...

as007012012
2017/05/04
0
0
JAVA中List与Array之间互换

1、List转Array ArrayList list = new ArrayList(); list.add("dff1"); list.add("dff2"); list.add("dff3"); list.add("dff4"); list.add("dff5"); String[] array = new String[list.size......

ke_ry
2016/08/29
0
0
java list去重,分组将数据存入map中了,list,array转换

查找ArrayList中的重复的String,然后将string加入到list中,去重 ArrayList<String> result = new ArrayList<String>(); for(String s: sources){ if(Collections.frequency(reslut, s) < 1)......

writeademo
2016/08/11
130
0
Android ArrayList

在Android开发中我们经常需要对数据进行分类和操作,对于轻量级的数据存储我们可能不需要动用SQLite或效率以及类库不完善的XML, 由于 SharedPreferences不具备数据枚举方法,如果仅仅是一个...

SRain215
2016/03/16
44
0

没有更多内容

加载失败,请刷新页面

加载更多

用any-loader封装jQuery的XHR —— 随便写着玩系列

哎,都说没人用JQuery啦,叫你别写这个。 其实我也是好高骛远使用过npm上某个和某个很出名的XHR库,嗯,认识我的人都知道我喜欢喷JQ,以前天天喷,见面第一句,你还用JQ,赶紧丢了吧。但我也...

曾建凯
今天
3
0
聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
今天
3
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
5
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
3
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部