C#泛型類之LIST

pamxy發表於2013-10-12

轉自: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.


相關文章