標籤:io ar 使用 sp for strong 資料 div on
C#泛型List的用法
來源:C#學習 發布時間:2014/1/4
一、List<T>命名空間:
System.Collections.Generic(程式集:mscorlib)
二、List<T>描述:
1)、表示可通過索引訪問的對象的強型別列表;提供用於對列表進行搜尋、排序和操作的方法。
2)、是ArrayList類的泛型等效類。
3)、可以使用一個整數索引訪問此集合中的元素;索引從 零 開始。
4)、可以接收nullNull 參考(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);
////用法舉例
List<int> list = new List<int>() { 2, 3, 6, 9, 11, 23, 89 };
int temp = 0;
for (int i = 0; i < list.Count; i++)
{
if (list[i] == 9)
{
temp = i;
}
}
list.RemoveRange(0,temp);
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.ReadKey();
(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.
C#泛型List的用法