文档章节

List、Array与ArrayList

shimmerkaiye
 shimmerkaiye
发布于 2018/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
博文 110
码字总数 37802
作品 0
程序员
私信 提问
C#中的数组类型[],List,Array,ArrayList的区别

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

酷酷小乔
2018/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

没有更多内容

加载失败,请刷新页面

加载更多

利用神器BTrace 追踪线上 Spring Boot应用运行时信息

概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值、外部调用情况 以及 函数执行时间等信...

CodeSheep
今天
10
0
OSChina 周四乱弹 —— 我想过年请假提前回家两天

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 分享王力宏的单曲《爱错》 《爱错》- 王力宏 手机党少年们想听歌,请使劲儿戳(这里) @Caremorele :这几天起床有点...

小小编辑
今天
280
7
Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
3
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部