C# List<T>的用法小結(jié)
所屬命名空間:System.Collections.Generic
public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
List<T>類是 ArrayList 類的泛型等效類。該類使用大小可按需動(dòng)態(tài)增加的數(shù)組實(shí)現(xiàn) IList<T> 泛型接口。
泛型的好處: 它為使用c#語(yǔ)言編寫面向?qū)ο蟪绦蛟黾恿藰O大的效力和靈活性。不會(huì)強(qiáng)行對(duì)值類型進(jìn)行裝箱和拆箱,或?qū)σ妙愋瓦M(jìn)行向下強(qiáng)制類型轉(zhuǎn)換,所以性能得到提高。
性能注意事項(xiàng):
在決定使用IList<T> 還是使用ArrayList類(兩者具有類似的功能)時(shí),記住IList<T> 類在大多數(shù)情況下執(zhí)行得更好并且是類型安全的。
如果對(duì)IList<T> 類的類型 T 使用引用類型,則兩個(gè)類的行為是完全相同的。但是,如果對(duì)類型 T 使用值類型,則需要考慮實(shí)現(xiàn)和裝箱問題。
“添加到 ArrayList 中的任何引用或值類型都將隱式地向上強(qiáng)制轉(zhuǎn)換為 Object。如果項(xiàng)是值類型,則必須在將其添加到列表中時(shí)進(jìn)行裝箱操作,在檢索時(shí)進(jìn)行取消裝箱操作。強(qiáng)制轉(zhuǎn)換以及裝箱和取消裝箱操作都會(huì)降低性能;在必須對(duì)大型集合進(jìn)行循環(huán)訪問的情況下,裝箱和取消裝箱的影響非常明顯?!?/P>
1、List的基礎(chǔ)、常用方法:
聲明:
1、List<T> mList = new List<T>();
T為列表中元素類型,現(xiàn)在以string類型作為例子
E.g.:List<string> mList = new List<string>();
2、List<T> testList =new List<T> (IEnumerable<T> collection);
以一個(gè)集合作為參數(shù)創(chuàng)建List
E.g.:
string[] temArr = { "Ha", "Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", "Locu" };
List<string> testList = new List<string>(temArr);
添加元素:
1、 List. Add(T item) 添加一個(gè)元素
E.g.:mList.Add("John");
2、 List. AddRange(IEnumerable<T> collection) 添加一組元素
E.g.:
string[] temArr = { "Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", "Locu" };
mList.AddRange(temArr);
3、Insert(int index, T item); 在index位置添加一個(gè)元素
E.g.:mList.Insert(1, "Hei");
遍歷List中元素:
foreach (T element in mList) T的類型與mList聲明時(shí)一樣
{
Console.WriteLine(element);
}
E.g.:
foreach (string s in mList)
{
Console.WriteLine(s);
}
刪除元素:
1、 List. Remove(T item)刪除一個(gè)值
E.g.:mList.Remove("Hunter");
2、 List. RemoveAt(int index); 刪除下標(biāo)為index的元素
E.g.:mList.RemoveAt(0);
3、 List. RemoveRange(int index, int count);
從下標(biāo)index開始,刪除count個(gè)元素
E.g.:mList.RemoveRange(3, 2);
判斷某個(gè)元素是否在該List中:
List. Contains(T item) 返回true或false,很實(shí)用
E.g.:
if (mList.Contains("Hunter"))
{
Console.WriteLine("There is Hunter in the list");
}
else
{
mList.Add("Hunter");
Console.WriteLine("Add Hunter successfully.");
}
給List里面元素排序:
List. Sort () 默認(rèn)是元素第一個(gè)字母按升序
E.g.:mList.Sort();
給List里面元素順序反轉(zhuǎn):
List. Reverse () 可以與List. Sort ()配合使用,達(dá)到想要的效果
E.g.:mList.Sort();
List清空:List. Clear ()
E.g.: mList.Clear();
獲得List中元素?cái)?shù)目:
List. Count () 返回int值
E.g.:
int count = mList.Count();
Console.WriteLine("The num of elements in the list: " +count);
2、List的進(jìn)階、強(qiáng)大方法:
舉例用的List:
string[] temArr = { Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", " "Locu" };
mList.AddRange(temArr);
List.Find 方法:搜索與指定謂詞所定義的條件相匹配的元素,并返回整個(gè) List 中的第一個(gè)匹配元素。
public T Find(Predicate<T> match);
Predicate是對(duì)方法的委托,如果傳遞給它的對(duì)象與委托中定義的條件匹配,則該方法返回 true。當(dāng)前 List 的元素被逐個(gè)傳遞給Predicate委托,并在 List 中向前移動(dòng),從第一個(gè)元素開始,到最后一個(gè)元素結(jié)束。當(dāng)找到匹配項(xiàng)時(shí)處理即停止。
Predicate 可以委托給一個(gè)函數(shù)或者一個(gè)拉姆達(dá)表達(dá)式:
委托給拉姆達(dá)表達(dá)式:
E.g.:
string listFind = mList.Find(name => //name是變量,代表的是mList
{ //中元素,自己設(shè)定
if (name.Length > 3)
{
return true;
}
return false;
});
Console.WriteLine(listFind); //輸出是Hunter
委托給一個(gè)函數(shù):
E.g.:
string listFind1 = mList.Find(ListFind); //委托給ListFind函數(shù)
Console.WriteLine(listFind); //輸出是Hunter
ListFind函數(shù):
public bool ListFind(string name)
{
if (name.Length > 3)
{
return true;
}
return false;
}
這兩種方法的結(jié)果是一樣的。
List.FindLast 方法:搜索與指定謂詞所定義的條件相匹配的元素,并返回整個(gè) List 中的最后一個(gè)匹配元素。
public T FindLast(Predicate<T> match);
用法與List.Find相同。
List.TrueForAll方法: 確定是否 List 中的每個(gè)元素都與指定的謂詞所定義的條件相匹配。
public bool TrueForAll(Predicate<T> match);
委托給拉姆達(dá)表達(dá)式:
E.g.:
bool flag = mList.TrueForAll(name =>
{
if (name.Length > 3)
{
return true;
}
else
{
return false;
}
}
);
Console.WriteLine("True for all: "+flag); //flag值為false
委托給一個(gè)函數(shù),這里用到上面的ListFind函數(shù):
E.g.:
bool flag = mList.TrueForAll(ListFind); //委托給ListFind函數(shù)
Console.WriteLine("True for all: "+flag); //flag值為false
這兩種方法的結(jié)果是一樣的。
List.FindAll方法:檢索與指定謂詞所定義的條件相匹配的所有元素。
public List<T> FindAll(Predicate<T> match);
E.g.:
List<string> subList = mList.FindAll(ListFind); //委托給ListFind函數(shù)
foreach (string s in subList)
{
Console.WriteLine("element in subList: "+s);
}
這時(shí)subList存儲(chǔ)的就是所有長(zhǎng)度大于3的元素
List.Take(n): 獲得前n行 返回值為IEnumetable<T>,T的類型與List<T>的類型一樣
E.g.:
IEnumerable<string> takeList= mList.Take(5);
foreach (string s in takeList)
{
Console.WriteLine("element in takeList: " + s);
}
這時(shí)takeList存放的元素就是mList中的前5個(gè)
List.Where方法:檢索與指定謂詞所定義的條件相匹配的所有元素。跟List.FindAll方法類似。
E.g.:
IEnumerable<string> whereList = mList.Where(name =>
{
if (name.Length > 3)
{
return true;
}
else
{
return false;
}
});
foreach (string s in subList)
{
Console.WriteLine("element in subList: "+s);
}
這時(shí)subList存儲(chǔ)的就是所有長(zhǎng)度大于3的元素
List.RemoveAll方法:移除與指定的謂詞所定義的條件相匹配的所有元素。
public int RemoveAll(Predicate<T> match);
E.g.:
mList.RemoveAll(name =>
{
if (name.Length > 3)
{
return true;
}
else
{
return false;
}
});
foreach (string s in mList)
{
Console.WriteLine("element in mList: " + s);
}
這時(shí)mList存儲(chǔ)的就是移除長(zhǎng)度大于3之后的元素。
List<T> 是一個(gè)泛型鏈表...T表示節(jié)點(diǎn)元素類型
比如
List<int> intList;表示一個(gè)元素為int的鏈表
intList.Add(34); //添加
intList.Remove(34);//刪除
intList.RemoveAt(0); //刪除位于某處的元素
intList.Count; //鏈表長(zhǎng)度
還有Insert,Find,FindAll,Contains等方法,也有索引方法 intList[0] = 23;
1.減少了裝箱拆箱
2.便于編譯時(shí)檢查數(shù)據(jù)類型
List<Object> 就相當(dāng)于 System.Collections命名空間里面的List
相關(guān)文章
C#開發(fā)Winform控件之打開文件對(duì)話框OpenFileDialog類
這篇文章介紹了C#開發(fā)Winform控件之打開文件對(duì)話框OpenFileDialog類,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-02-0210分鐘學(xué)會(huì)Visual Studio將自己創(chuàng)建的類庫(kù)打包到NuGet進(jìn)行引用(net,net core,C#)
這篇文章主要介紹了10分鐘學(xué)會(huì)Visual Studio將自己創(chuàng)建的類庫(kù)打包到NuGet進(jìn)行引用(net,net core,C#),本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09C#實(shí)現(xiàn)簡(jiǎn)單獲取掃碼槍信息代碼
本文給大家分享的是使用C#實(shí)現(xiàn)簡(jiǎn)單獲取掃碼槍信息代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2016-07-07DevExpress實(shí)現(xiàn)GridControl列頭繪制Checkbox的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridControl列頭繪制Checkbox的方法,需要的朋友可以參考下2014-08-08C#使用NOPI庫(kù)實(shí)現(xiàn)導(dǎo)入Excel文檔
NPOI中N指代的是.Net,POI是一個(gè)完全開源的Java寫成的庫(kù),能夠在沒有安裝微軟Office或者相應(yīng)環(huán)境的情況下讀寫Excel、Word等微軟OLE2組件文檔,幾乎支持所有的Office97~Office2007的文件格式。所以NPOI就是POI項(xiàng)目的.Net版本。2017-05-05