泛型List與ArrayList的比較

在講之前我們先看一下ArrayList的應用:  

ArrayList 是一個使用起來非常方便的集合類,無需進行修改即可用來存儲任何引用或值類型。 如:

        ArrayList list1 = new ArrayList();
        list1.Add(1);
        list1.Add(2);

        ArrayList list2 = new ArrayList();
        list2.Add("1");
        list2.Add("2");

問題1: 
  這種方便是需要付出代價的。添加到 ArrayList 中的任何引用或值類型都將隱式地向上強制轉換爲 Object。如果項是值類型,則必須在將其添加到列表中時進行裝箱操作,在檢索時進行取消裝箱操作。強制轉換以及裝箱和取消裝箱操作都會降低性能;在必須對大型集合進行循環訪問的情況下,裝箱和取消裝箱的影響非常明顯。

問題2:

  另一個限制是缺少編譯時類型檢查;因爲 ArrayList 將把所有項都強制轉換爲 Object,所以在編譯時無法防止客戶端代碼執行以下操作:

        ArrayList list1 = new ArrayList();
        list1.Add(1);
        list1.Add("hehe");

        int result = 0;
        for (int i = 0; i < list1.Count; i++)
        {
            result +=int.Parse(list1[i].ToString());
        }

儘管將字符串和 int組合在一個 ArrayList 中的做法在創建異類集合時是完全合法的,有時是有意圖的,但這種做法更可能產生編程錯誤,並且直到運行時才能檢測到此錯誤。

解決方法:

而泛型很好的解決了這兩個問題;:

        List<int> listInt = new List<int>();
        listInt.Add(1);
        listInt.Add(2);

        List<string> listStr = new List<string>();
        listStr.Add("str1");
        listStr.Add("str2");

泛型明確的定義了存儲的類型;特別適用於列表項是值類型的情況

發佈了88 篇原創文章 · 獲贊 16 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章