一、        定義

System.Collections.Generic.List<T>類表示可經過索引訪問的對象的強類型列表。提供用於對列表進行搜索、排序和操做的方法。T爲類型參數,表明列表中元素的類型。該類實現了IList<T>泛型接口,是ArrayList類的泛型等效類,其大小可按需動態增長。html

2.構造函數

名稱數組

說明安全

List<T>()數據結構

初始化 List<T> 類的新實例,該實例爲空而且具備默認初始容量(0)。dom

List<T>(IEnumerable<T>)ide

初始化 List<T> 類的新實例,該實例包含從指定集合複製的元素而且具備足夠的容量來容納所複製的元素。函數

List<T>(Int32)post

始化 List<T> 類的新實例,該實例爲空而且具備指定的初始容量。性能

說明:默認向 List<T> 添加元素時,將經過從新分配內部數組,根據須要自動增大容量。若是能夠估計集合的大小,那麼當指定初始容量後,將無需在向 List<T> 中添加元素時執行大量的大小調整操做。這樣可提升性能。url

 

3. List<T>方法

名稱

說明

Add

將對象添加到 List<T> 的結尾處。

AddRange

將指定集合的元素添加到 List<T> 的末尾。

AsReadOnly

返回當前集合的只讀 IList<T> 包裝。

BinarySearch(T)

使用默認的比較器在整個已排序的 List<T> 中搜索元素,並返回該元素從零開始的索引。

BinarySearch(T, IComparer<T>)

使用指定的比較器在整個已排序的 List<T> 中搜索元素,並返回該元素從零開始的索引。

BinarySearch(Int32, Int32, T, IComparer<T>)

使用指定的比較器在已排序 List<T> 的某個元素範圍中搜索元素,並返回該元素從零開始的索引。

Clear

從 List<T> 中移除全部元素。

Contains

肯定某元素是否在 List<T> 中。

ConvertAll<TOutput>

將當前 List<T> 中的元素轉換爲另外一種類型,並返回包含轉換後的元素的列表。

CopyTo(T[])

將整個 List<T> 複製到兼容的一維數組中,從目標數組的開頭開始放置。

Exists

肯定 List<T> 是否包含與指定謂詞所定義的條件相匹配的元素。

Find

搜索與指定謂詞所定義的條件相匹配的元素,並返回整個 List<T> 中的第一個匹配元素。

FindIndex(Predicate<T>)

搜索與指定謂詞所定義的條件相匹配的元素,並返回整個 List<T> 中第一個匹配元素的從零開始的索引。

ForEach

對 List<T> 的每一個元素執行指定操做。

GetEnumerator

返回循環訪問 List<T> 的枚舉器。

IndexOf(T)

搜索指定的對象,並返回整個 List<T> 中第一個匹配項的從零開始的索引。

Insert

將元素插入 List<T> 的指定索引處。

InsertRange

將集合中的某個元素插入 List<T> 的指定索引處。

LastIndexOf(T)

搜索指定的對象,並返回整個 List<T> 中最後一個匹配項的從零開始的索引。

Remove

從 List<T> 中移除特定對象的第一個匹配項。

Reverse()

將整個 List<T> 中元素的順序反轉。

Sort()

使用默認比較器對整個 List<T> 中的元素進行排序。

TrimExcess

將容量設置爲 List<T> 中的實際元素數目(若是該數目小於某個閾值)。

TrueForAll

肯定是否 List<T> 中的每一個元素都與指定的謂詞所定義的條件相匹配。

說明:上述方法說明中有用到「謂詞」,謂詞就是Predicate<T> 委託,它表明一組方法,該方法定義一組條件,並肯定指定的參數對象是否符合這些條件,具體的參見示例程序。

4. List<T>屬性

名稱

說明

Capacity

獲取或設置該內部數據結構在不調整大小的狀況下可以容納的元素總數。

Count

獲取 List<T> 中實際包含的元素數。

說明:Capacity 是 List<T> 在須要調整大小以前能夠存儲的元素數,Count 則是 List<T> 中實際存儲的元素數。

5.示例程序

 

代碼
class Program { static void Main( string [] args) { #region List<T>類經常使用的方法 List < string > dinosaurs = new List < string > (); // 建立一個string的List集合 Console.WriteLine( " \nCapacity: {0} " , dinosaurs.Capacity); // 輸出默認容量的大小 dinosaurs.Add( " Tyrannosaurus " ); // 向集合添加元素 dinosaurs.Add( " Amargasaurus " ); dinosaurs.Add( " Mamenchisaurus " ); dinosaurs.Add( " Deinonychus " ); dinosaurs.Add( " Compsognathus " );
Console.WriteLine();
foreach ( string dinosaur in dinosaurs) // 打印集合中的元素 { Console.WriteLine(dinosaur); }
Console.WriteLine(
" \nCapacity: {0} " , dinosaurs.Capacity); Console.WriteLine( " Count: {0} " , dinosaurs.Count); // 輸出集合中實際元素的數量 Console.WriteLine( " \nContains(\ " Deinonychus\ " ): {0} " , dinosaurs.Contains( " Deinonychus " )); // 判斷集合中是否包含某個元素 Console.WriteLine( " \nInsert(2, \ " Compsognathus\ " ) " ); dinosaurs.Insert( 2 , " Compsognathus " ); // 將元素插入到集合的指定索引出,容許插入重複的元素 Console.WriteLine(); foreach ( string dinosaur in dinosaurs) // 打印集合中的元素 { Console.WriteLine(dinosaur); } Console.WriteLine( " \ndinosaurs[3]: {0} " , dinosaurs[ 3 ]); // 輸出集合中索引爲3的元素 Console.WriteLine( " \nRemove(\ " Compsognathus\ " ) " ); dinosaurs.Remove( " Compsognathus " ); // 移除集合中第一個匹配的元素 Console.WriteLine(); foreach ( string dinosaur in dinosaurs) // 打印集合中的元素 { Console.WriteLine(dinosaur); } dinosaurs.TrimExcess(); // 減少容量以匹配計數,而後顯示 Capacity 和 Count 屬性。若是未用容量已經小於總容量的 10%,則列表容量不會進行調整。 Console.WriteLine( " \nTrimExcess() " ); Console.WriteLine( " Capacity: {0} " , dinosaurs.Capacity); Console.WriteLine( " Count: {0} " , dinosaurs.Count);
dinosaurs.Clear();
// 移除列表中的全部項,而後顯示 Capacity 和 Count 屬性。 Console.WriteLine( " \nClear() " ); Console.WriteLine( " Capacity: {0} " , dinosaurs.Capacity); Console.WriteLine( " Count: {0} " , dinosaurs.Count); #endregion
#region List<T>類的新增方法
List
< string > dinosaurs1 = new List < string > (); // 建立一個string的List集合 dinosaurs1.Add( " Compsognathus " ); // 向集合添加元素 dinosaurs1.Add( " Amargasaurus " ); dinosaurs1.Add( " Oviraptor " ); dinosaurs1.Add( " Velociraptor " ); dinosaurs1.Add( " Deinonychus " ); dinosaurs1.Add( " Dilophosaurus " ); dinosaurs1.Add( " Gallimimus " ); dinosaurs1.Add( " Triceratops " );
Console.WriteLine();
foreach ( string dinosaur in dinosaurs1) { Console.WriteLine(dinosaur); }
Console.WriteLine(
" \nTrueForAll(EndsWithSaurus): {0} " , dinosaurs1.TrueForAll(EndsWithSaurus)); // 肯定集合中的每一個元素是否都與指定的謂詞所定義的條件相匹配 Console.WriteLine( " \nFind(EndsWithSaurus): {0} " , dinosaurs1.Find(EndsWithSaurus)); // 搜索與指定謂詞條件相匹配的第一個元素 Console.WriteLine( " \nFindLast(EndsWithSaurus): {0} " , dinosaurs1.FindLast(EndsWithSaurus)); // 搜索與指定謂詞條件相匹配的最後一個元素 Console.WriteLine( " \nFindAll(EndsWithSaurus): " ); List < string > sublist = dinosaurs1.FindAll(EndsWithSaurus); // 檢索與指定謂詞定義的條件匹配的全部元素 foreach ( string dinosaur in sublist) // 打印集合 { Console.WriteLine(dinosaur); }
Console.WriteLine(
" \n{0} elements removed by RemoveAll(EndsWithSaurus). " , dinosaurs1.RemoveAll(EndsWithSaurus)); // 移除與指定謂詞定義的條件匹配的全部元素 Console.WriteLine( " \nList now contains: " ); foreach ( string dinosaur in dinosaurs1) // 打印集合 { Console.WriteLine(dinosaur); }
Console.WriteLine(
" \nExists(EndsWithSaurus): {0} " , dinosaurs1.Exists(EndsWithSaurus)); // 該方法從頭開始遍歷該列表,依次將每一個元素傳遞給 EndsWithSaurus 方法。若是 EndsWithSaurus 方法針對任何元素返回 true,搜索即中止 dinosaurs1.Sort(); // 對集合中的元素排序 dinosaurs1.Reverse(); // 將集合中的元素順序反轉 dinosaurs1.ForEach(Print); // 對集合中的每一個元素執行指定的方法(如Print方法) Console.Read(); #endregion }
// 搜索謂詞方法,該方法接受一個字符串做爲參數,並返回一個布爾值,指示輸入的字符串是否以「saurus」結尾。 private static bool EndsWithSaurus(String s) { if ((s.Length > 5 ) && (s.Substring(s.Length - 6 ).ToLower() == " saurus " )) { return true ; } else { return false ; } }
// 定義打印集合的方法 private static void Print( string s) { Console.WriteLine(s); }
}

 

 

6.備註

一、  List<T> 類既使用相等比較器又使用排序比較器。

  • 諸如 Contains、IndexOf、LastIndexOf 和 Remove 這樣的方法對列表元素使用相等比較器。類型 T 的默認相等比較器按以下方式肯定。若是類型 T 實現 IEquatable<T> 泛型接口,則相等比較器爲該接口的 Equals(T) 方法;不然,默認相等比較器爲 Object.Equals(Object)。
  • 諸如 BinarySearch 和 Sort 這樣的方法對列表元素使用排序比較器。類型 T 的默認比較器按以下方式肯定。若是類型 T 實現 IComparable<T> 泛型接口,則默認比較器爲該接口的 CompareTo(T) 方法;不然,若是類型 T 實現非泛型 IComparable 接口,則默認比較器爲該接口的 CompareTo(Object) 方法。若是類型 T 沒有實現其中任一個接口,則不存在默認比較器,而且必須顯式提供比較器或比較委託。

二、  List<T> 不保證是排序的。在執行要求 List<T> 已排序的操做(例如 BinarySearch)以前,您必須對 List<T> 進行排序。

三、  List<T> 不保證是排序的。在執行要求 List<T> 已排序的操做(例如 BinarySearch)以前,您必須對 List<T> 進行排序。

四、  使用整數索引能夠訪問此集合中的元素。此集合中的索引從零開始。

五、  List<T> 接受 null 做爲引用類型的有效值而且容許有重複的元素。

六、  大多數狀況下List<T>執行得更好而且是類型安全的,能夠替換ArrayList,可是若是對類型 T 使用值類型,則編譯器將特別針對該值類型生成 List<T> 類的實現。這意味着沒必要對 List<T> 對象的列表元素進行裝箱就可使用該元素,而且在建立大約 500 個列表元素以後,不對列表元素裝箱所節省的內存將大於生成該類實現所使用的內存。若是建立小於500個元素,建議使用ArrayList.