栏目导航
热点推荐
- 如何配置Web.config文件 for ASP
- .NET小常识——答你所问
- ASP.NET程序中常用的三十三种代
- 一个“简单”的ASP.NET的服务器
- ASP.NET中使用AJAX中的方式
- 从N层到.NET详细剖析原理(2)
- 十项必须学习的.NET技术
- Visual Basic中文本框处理技巧集
- 几十个ASP.NET性能优化的常用方
- ASP.NET技术FAQ
- Asp.Net细节性问题精萃
- 十天学会ASP.net之第一天
阅览排行
.NET,你忘记了么?(三)——关于Array和List的使用
www.jz123.cn 2010-10-03 来源: 中国建站 责任编辑(袁袁) 我要投递新闻
数组必须要在初始化时分配固定的大小,比如说int[] a=new int[3];如果我们仅仅写int[] a=new int[];编译器就会无情地给我们报错。但是List由于空间不必连续,所以无须指定初始大小。
总结1: 当不确定大小时,最好使用List代替Array。
2. 从操作角度上来看:
关于索引这个就不赘述了。
总结2:当需要大量的查找操作时,最好使用Array。
对于插入(删除)操作,很多人是从插入(删除)的时间上分析,说List优于Array,我觉得是不合理的。
更合理的解释应该是从两个角度分析(以插入为例):
<1> 指定位置插入指定元素:
对于Array讲,有两套解决方案:
A. 使用一个新数组,N+1个元素重新赋值的过程。一个for循环,时间复杂度O(n)。
B. 在原数组上操作,那么首先需要为该数组预留空间,这是个很难办的事情。而且其后续元素的移动耗费时间复杂度仍未O(n)。
对于List来讲,很多人说复杂度就是O(1)。这其实是不合理的,因为List插入元素固然容易,但是在指定位置的插入,需要一个时间复杂度为O(n)的查找过程。
但是只考虑时间复杂度是不够的,我们要考虑总体的情况。如果使用新数组,不仅浪费了新的空间,而且需要反复的赋值过程,是N+1次。如果不使用新数组,预留空间实在太麻烦,因此综上所述,还是List好。
(补充下:很多同事和朋友都问我,说为什么要学那么多的排序和搜索算法,排序学个快速排序,搜索学个二分搜索,这样就够了呗!但是我想说的是,所说的最快,不过是他们的平均(或最坏)情况下的时间复杂度,并不能代表通用的情况,我们在实际工作中,还是要根据实际情况去选择最适用的算法,这就是我们学习很多算法的目的)
<2> 给出前一个节点,然后在后面插入元素。这个我的意思就是不仅仅给出了PreviousNode的Value,还给出了他的Next。这个情况我就不废话了,List的优势太大了。可是在实际情况中,这种情况的可能性几乎为零。
因此,总结3:当需要进行频繁的插入,删除操作时,最好使用List代替Array。
另外,给出个不太重要的补充,由于List需要存储他下一个节点的地址,所以List比Array相对起来浪费了更多的空间。
这次关于List和Array的用法区别就先写到这。希望大家有什么不同意见的多多指教!
上一篇:.NET,你忘记了么?(二)——使用using清理非托管资源 下一篇:.NET,你忘记了么?(三续)——重新理解List<T>