PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_Sharp
[问题] List<T>底层是怎么实作的?
楼主:
stu87616
(文组工程师)
2014-08-16 13:41:20
最近在帮朋友解C++的问题,常常动不动就手痒用LinkedList存东西
应该是C#的List<T>太方便,用太多的后遗症
但是C++的东西都要自己亲自写(我知道是有套件,但是用起来也是麻烦,干脆自己写)
辛苦实作之余,我不禁想了想,C#的List<T>底层到底都是怎么实作的呢?
从资料结构的课程来分析,
资料存放的方式有两大种,阵列和串行,
阵列的优点是存取各项目非常方便迅速,缺点则是增减项目非常麻烦,
串行则刚好颠倒过来
而List<T>可以用像阵列一样直接用index存取每个项目,
但增删项目似乎也只需要简单的调用方法就好(Add、Remove)
整个看起来就是Magic (?)
不过看过MSDN之后,发现List<T>好像来源跟ArrayList差不多,
所以List<T>是基于阵列的架构下实作的结构吗?
那又是怎么克服增删项目的困难呢?
(莫非看起来很简单的方法,底层其实是一堆脏码吗?)
因为实在想不明白,就上来问问各位前辈
作者:
ssccg
(23)
2014-08-16 14:49:00
用array做的,空间不够就重新allocate新arrayList<T>就是ArrayList的generic版啊C++也不用自己写啊,用vector就好没错List插入就会把后面的都往后搬,所以要O(n)所以通常用List是不太会去用指定index的方法的insert/remove
作者:
uranusjr
(â†é€™äººæ˜¯è¶…級笨蛋)
2014-08-16 15:34:00
FWIW, C# 有 LinkedList, 请在合适时选用
作者:
jackace
(inevitable......)
2014-08-16 18:08:00
c++明明就有list<T> 跟懒有什么关系
作者:
jizang
(阿鲁米)
2014-08-16 20:35:00
都叫做 List,怎么还会跟 Array 扯上关系!
作者: iterator (rotareti)
2014-08-17 02:16:00
直接看 .NET Framework 的 source code 吧!
http://tinyurl.com/pd8ma9j
list.csPurpose: Implements a generic, dynamicallysized list as an array.
继续阅读
[征才] .NET MVC 工程师 (林口)
sing10407
[问题] String收值问题
future314
[问题] datalist里的image套用jquery后版型跑掉
windmax1
[问题] for循环新增datagridview跳出
vulxj0j8j8
[问题] 全域变量(物件)
BigLoser
[问题] “Dictionary[变量]”的用法?
hoyunxian
[问题] BindingSource.CancelEdit
DendiQ
[问题] 自动打印软件方向
h89256
[问题] report viewer设计问题
ysgrm8502
[问题] Grid储存格内编辑后欲重新绑定资料会出错
karta031736
Links
booklink
Contact Us: admin [ a t ] ucptt.com