一、List<T>命名空間:
System.Collections.Generic(程序集:mscorlib)
二、List<T>描述:
1)、表示可通過索引訪問的對象的強類型列表;提供用于對列表進行搜索、排序和操作的方法。 2)、是ArrayList類的泛型等效類。 3)、可以使用一個整數索引訪問此集合中的元素;索引從 零 開始。 4)、可以接收null空引用(VB中的Nothing)。 5)、允許重復元素
三、List<T>構造函數
名稱 | 說明 |
List<T>() | 初始化 List<T> 類的新實例,該實例為空并且具有默認初始容量(0)。 |
List<T>(IEnumerable<T>) | 初始化 List<T> 類的新實例,該實例包含從指定集合復制的元素并且具有足夠的容量來容納所復制的元素。 |
List<T>(Int32) | 始化 List<T> 類的新實例,該實例為空并且具有指定的初始容量。 |
說明:默認向 List<T> 添加元素時,將通過重新分配內部數組,根據需要自動增大容量。如果可以估計集合的大小,那么當指定初始容量后,將無需在向 List<T> 中添加元素時執行大量的大小調整操作。這樣可提高性能。
四、List<T>屬性
名稱 | 說明 |
Capacity | 獲取或設置該內部數據結構在不調整大小的情況下能夠容納的元素總數。 |
Count | 獲取 List<T> 中實際包含的元素數。 |
說明:Capacity 是 List<T> 在需要調整大小之前可以存儲的元素數,Count 則是 List<T> 中實際存儲的元素數。
五、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> 委托,它代表一組方法,該方法定義一組條件,并確定指定的參數對象是否符合這些條件,具體的參見示例程序。
六、常用方法實例
(1)創建及初始化:
List<string> myList = new List<string>();//初始Capacity為 零 List<string> myList2 = new List<string>(30); //初始Capacity為 30 List<string> myList3 = new List<string>(new string[] { "1", "a", "2", "b" });//初始Capacity 為 4,并且元素已被復制
(2)添加一個元素 List.Add(T item)
mlist.Add("d");
(3)添加集合元素
string[] Arr2 ={"f","g"."h"}; mlist.AddRange(Arr2);
(4)在index位置添加一個元素 Insert(int index,T item)
mlist.Insert(1,"p");
(5)遍歷List中元素
foreach(T element in mlist) T的類型與mlist聲明時一樣 { Console.WriteLine(element); }
(6)刪除元素
List.Remove(T item) 刪除一個值 mlist.Remove("a");
List.RemoveAt(int index);刪除下標為index的元素 mlist.RemoveAt(0);
List.RemoveRange(int index,int count); 下標index開始,刪除count個元素 mlist.RemoveRange(3,2);
(7)判斷某個元素是否在該List中
List.Contains(T item) 返回true或false
if(mlist.Contains"("g")) Console.WriteLine("g存在列表中"); else mlist.Add("g");
(8)給List里面元素排序 List.Sort() 默認是元素每一個字母按升序
mlist.Sort();
(9)給List里面元素順序反轉 List.Reverse() 可以與List.Sort()配合使用
(10)List清空 List.Clear()
mlist.Clear();
(11)Capacity與Count
1)、Capacity在需要調整大小之前可存儲的元素數;Count實際存儲的元素數。 2)、Capacity總是大于或者等于Count
七、List<T>的注意事項
1、 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 沒有實現其中任一個接口,則不存在默認比較器,并且必須顯式提供比較器或比較委托。
2、 List<T> 不保證是排序的。在執行要求 List<T> 已排序的操作(例如 BinarySearch)之前,您必須對 List<T> 進行排序。
3、 List<T> 不保證是排序的。在執行要求 List<T> 已排序的操作(例如 BinarySearch)之前,您必須對 List<T> 進行排序。
4、 使用整數索引可以訪問此集合中的元素。此集合中的索引從零開始。
5、 List<T> 接受 null 作為引用類型的有效值并且允許有重復的元素。
6、 大多數情況下List<T>執行得更好并且是類型安全的,可以替換ArrayList,但是如果對類型 T 使用值類型,則編譯器將特別針對該值類型生成 List<T> 類的實現。這意味著不必對 List<T> 對象的列表元素進行裝箱就可以使用該元素,并且在創建大約 500 個列表元素之后,不對列表元素裝箱所節省的內存將大于生成該類實現所使用的內存。如果創建小于500個元素,建議使用ArrayList.
新聞熱點
疑難解答