文档章节

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
博文 86
码字总数 32985
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

打开eclipse出现an error has occurred see the log file

解决方法: 1,打开eclipse安装目录下的eclipse.ini文件; 2,打开的文本文件最后添加一行 --add-modules=ALL-SYSTEM 3,保存重新打开Eclipse。...

任梁荣
昨天
4
0
搞定Northwind示例数据库,无论哪个版本的SQLServer都受用

Northwind数据库 从这里可以找到突破口: http://social.msdn.microsoft.com/Forums/zh-CN/Vsexpressvb/thread/8490a1c6-9018-40c9-aafb-df9f79d29cde 下面是MSDN: http://msdn2.microsoft......

QQZZFT
昨天
1
0
mysql主从同步,安装配置操作

准备 两台mysql服务,我这里准备了如下: 主库:192.168.176.128 从库:192.168.176.131 如何在Linux上安装mysql服务,请看https://blog.csdn.net/qq_18860653/article/details/80250499 操作...

小致dad
昨天
4
0
一个手机装天下,走遍中国都不怕!

导读 “1200元(人民币,下同),微信支付,可以,你扫我。”来自西非马里共和国的展商Albert拿着手机,和一位买走他手鼓的中国游客用简单的汉语交流着。 近日,“第十四届中俄蒙经贸洽谈暨商品...

问题终结者
昨天
3
0
Redis的“死键”问题

大规模的数据库存储系统中,数据的生命周期管理是很有必要的;从业务角度发现过期数据,数据归档和数据碎片整理等。以MySQL为例,1个运行很久的TB级MySQL实例中,极有可能数百GB的数据,对业...

IT--小哥
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部