首页 新闻 会员 周边

数组和List有什么异同?

0
悬赏园豆:10 [已解决问题] 解决于 2012-12-19 10:21

除了他们实现的接口不同,成员不同,他们有没有自己特定的使用场景,还是任何情况下他们都可以相互替换?

梧桐树的主页 梧桐树 | 初学一级 | 园豆:52
提问于:2012-12-17 21:26
< >
分享
最佳答案
0

当然不能任何情况都相互替换,否则为什么要2者共存呢:) 在数据的读取方面它们几乎是相同的,而List<T>比T[]要多了很多修改集合的操作,所以如果你希望在定义后修改集合的大小,那么应当使用List<T>,如果你期望的是一个固定大小的容器,那么你应当使用T[]。比如你写一个方法(可能会被其他程序员使用),根据城市查询员工,这个方法的签名可能是这样:

public Employee[] GetEmployees(string city)

在这里,你返回了一个Employee[]数组,而不是List<Employee>,用来向你的调用者(其他程序员)传达一个信息:这个返回的员工集合不应当被修改(或者说,你对它的集合修改没有什么意义)。比如说你又写了一个功能函数:过滤掉一个employee集合里的city为“上海”的employee,那么签名可能是:

public void FilterEmployees(List<Employee> employees, string city)

这个函数签名向外界调用者传达了一个信息,就是employees这个集合是会被增/删元素的。

 

其实以上都是很细节了,在目前中国的大多数程序中,可以说T[] 和 List<T>都是混用的,很多人写的时候压根没考虑那么多,上手就是List<T>,甚至有人认为T[]已经过时了,应当用List<T>来代替。这些细节其实还是要注意一下的好,程序员要专业。

收获园豆:10
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-12-18 00:02

他们有性能方面的差别吗?比如说增删改的时候性能是一样的吗?

梧桐树 | 园豆:52 (初学一级) | 2012-12-18 08:39

@梧桐树: 一样,List<T>内部存储数据还是用的T[],你可以去看源码。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-12-18 09:10
其他回答(6)
0

是数组吧?

个人觉得,List比较的灵活,数组:数据结构中的顺序表,索引访问比较的快,List,这个数据结构中的单链表,操作数据还是很方便的。添加,删除等操作,都是很方便,数据的长度可以使无限大,不像数组,必须要在最开始的时候定义它的大小

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-17 21:31
0

你要进行增删改的话,还是用List<T>吧。。

jone_e | 园豆:1410 (小虾三级) | 2012-12-18 09:14
0

实际使用时, 优先考虑数组,如果数组不方便再考虑其它的

Qlin | 园豆:2403 (老鸟四级) | 2012-12-18 09:19
0

本人list使用的多

jason2013 | 园豆:1998 (小虾三级) | 2012-12-18 09:22
0

List不用初始化大小,数组需要

Invictus | 园豆:76 (初学一级) | 2012-12-18 10:06
0

楼主可以看看泛型的优缺点,相对于arraylist数组来说,毕竟都是集合,对数据的操作大的有两个

1.类型安全性。 你可以向arraylist中添加object类型的数据,当然就包含int /string类型。编译器在编译时很正常不会报错,但是在迭代该集合时,就出问题了。而泛型list则在添加数据时,编译就能感知数据的类型问题。

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

telang | 园豆:646 (小虾三级) | 2012-12-18 22:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册