[问题] 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.

Links booklink

Contact Us: admin [ a t ] ucptt.com