IList與List的區別

已經有很多人討論過IList和List的區別,恩,我也贊同其中的一些觀點,其實他們二者也是有優有劣的,看你着重用在哪個方面,先貼一下我贊同的意見,基本上也都是網友們總結的。

 

 

首先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<TestClass> list1 = new List<TestClass>();
            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<TestClass>list2 = new List<TestClass>();
            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好一點。

歡迎批評


原文轉自:http://wenku.baidu.com/view/523d73355a8102d276a22f64.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章