IList和List的區別?

Tags: 區別, 介面,

首先IList泛型介面是ICollection泛型介面的子代,並且是所有泛型列表的基介面。它僅僅是所有泛型型別的介面,並沒有太多方法可以方便實用,如果僅僅是作為集合資料的承載體,確實,IList可以勝任。

其次, IList <>是在.net framework 2.0裡面才支援的

1.不過,更多的時候,我們要對集合資料進行處理,從中篩選資料或者排序。這個時候

IList就不太好使了。因為他的效率要慢。後面會一一講到。

2、IList <>是個介面,定義了一些操作方法這些方法要你自己去實現,List <>是泛型類,它已經實現了IList <>定義的那些方法IList IList11 =new List ();List List11 =new List ();這兩行程式碼,從操作上來看,實際上都是建立了一個List物件的例項,也就是說,他們的操作沒有區別。只是用於儲存這個操作的返回值變數型別不一樣而已。那麼,我們可以這麼理解,這兩行程式碼的目的不一樣。List List11 =new List ();是想建立一個List,而且需要使用到List的功能,進行相關操作。而IList IList11 =new List ();只是想建立一個基於介面IList的物件的例項,只是這個介面是由List實現的。所以它只是希望使用到IList介面規定的功能而已。

3.介面實現鬆耦合...有利於系統的維護與重構...優化系統流程...鼓勵使用介面,這樣可以實現功能和具體實現的分離.

這些說的都是有道理的,那麼接剛才第一點的話題說,為什麼說用到資料處理,或者排序IList就不太好使了呢。這個也是要根據資料量來的。我做了如下測試

public class TestClass { public intId { get; set; } publicstring Name { get; set; } }

static void Main(string[] args) { ListTest(); }

private static void ListTest() { Stopwatchtimer = new Stopwatch(); timer.Start(); List list1 = new List (); for (int i =0; i < 10000000; i++) { TestClass tc = new TestClass(); tc.Id = i; tc.Name = "Test Data" + i; list1.Add(tc); } int count =0; foreach (vartc in list1) { if (tc.Id >= 1 && tc.Id < 1000) { count++; } } //list1.OrderBy(i => i.Id); timer.Stop(); Console.Write("Count:" + count + ", List time:"); Console.WriteLine(timer.Elapsed.Ticks); timer = newStopwatch(); timer.Start(); IList list2 = new List (); for (int i =0; i < 10000000; i++) { TestClass tc = new TestClass(); tc.Id = i; tc.Name = "Test Data" + i; list2.Add(tc); } int count2 =0; foreach (vartc in list2) { if (tc.Id >= 1 && tc.Id < 1000) { count2++; } } //list2.OrderBy(i => i.Id); timer.Stop(); Console.Write("Count:" + count2 + ", IList time:"); Console.WriteLine(timer.Elapsed.Ticks); Console.Read(); }

當我們都去遍歷IList和List的時候,注意我取的資料是1~1000之間,經過反覆測試,IList的效率確實是要低一些。那就更不用說資料量更大的時候,請看輸出框:

但是,當我取的資料是1~500的時候,IList似乎效率還是要慢一些。

另外,可能有的朋友會說,你把前面的for迴圈放在外面比較呢,這個我也做過測試,結果還是一樣,List效率要好於IList

同樣的方法,我測試了,IList和List的OrderBy的效率,List均有勝面,高效一籌。所以,什麼時候用IList和List自己去斟酌,當你用到設計的時候當然是IList合理一些。用做資料容器遍歷或者排序,還是選擇List好一點。

相關問題答案