C#泛型類之LIST
轉自:http://www.cnblogs.com/wisdomforce/archive/2010/05/31/1748642.html
1、 定義
System.Collections.Generic.List<T>類表示可通過索引訪問的物件的強型別列表。提供用於對列表進行搜尋、排序和操作的方法。T為型別引數,代表列表中元素的型別。該類實現了IList<T>泛型介面,是ArrayList類的泛型等效類,其大小可按需動態增加。
2.建構函式
名稱 |
說明 |
List<T>() |
初始化 List<T> 類的新例項,該例項為空並且具有預設初始容量(0)。 |
List<T>(IEnumerable<T>) |
初始化 List<T> 類的新例項,該例項包含從指定集合複製的元素並且具有足夠的容量來容納所複製的元素。 |
List<T>(Int32) |
始化 List<T> 類的新例項,該例項為空並且具有指定的初始容量。 |
說明:預設向 List<T> 新增元素時,將通過重新分配內部陣列,根據需要自動增大容量。如果可以估計集合的大小,那麼當指定初始容量後,將無需在向 List<T> 中新增元素時執行大量的大小調整操作。這樣可提高效能。
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.示例程式
6.備註
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.
相關文章
- 泛型集合 list泛型
- C# 泛型 基類約束C#泛型
- c#進階之泛型C#泛型
- C#之泛型詳解C#泛型
- C# 之泛型詳解C#泛型
- c#之泛型小記C#泛型
- C#類繼承自泛型集合C#繼承泛型
- TS系列之介面/類/泛型泛型
- 泛型類和泛型方法泛型
- 泛型類、泛型方法及泛型應用泛型
- C# 泛型C#泛型
- C#泛型C#泛型
- 【C#】-泛型C#泛型
- Java函式泛型List引數,操作泛型元素Java函式泛型
- TypeScript 泛型介面和泛型類TypeScript泛型
- C#中陣列Array、ArrayList、泛型List<T>的比較C#陣列泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- 泛型類及系統中常用的泛型類泛型
- C# 泛型方法C#泛型
- hashtable 泛型 C#泛型C#
- c#泛型集合C#泛型
- c#中判斷類是否繼承於泛型基類C#繼承泛型
- java泛型之泛型方法。Java泛型
- JAVA泛型類Java泛型
- dart系列之:dart類中的泛型Dart泛型
- 泛型類派生子類泛型
- Go 泛型之泛型約束Go泛型
- java泛型之泛型陣列。Java泛型陣列
- DataTable轉換list泛型集合(反射)泛型反射
- 淺談C#泛型C#泛型
- C#泛型約束C#泛型
- C#泛型學習C#泛型
- C# 泛型集合SortedListC#泛型
- c#泛型的使用C#泛型
- c#泛型續(一)C#泛型
- 泛型,內部類泛型
- 【譯】在非泛型類中建立泛型方法泛型
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元