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