public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable
List<T>类是 ArrayList 类的泛型等效类。该类运用大小可按需动态增添的数组完成 IList<T> 泛型接口。
泛型的优点: 它为运用c#言语编写面向对象递次增添了极大的效能和灵活性。不会强行对值范例举行装箱和拆箱,或对援用范例举行向下强迫范例转换,所以机能取得进步。
机能注意事项:
在决议运用IList<T> 照样运用ArrayList类(二者具有相似的功用)时,记着IList<T> 类在大多数情况下执行得更好并且是范例平安的。
假如对IList<T> 类的范例 T 运用援用范例,则两个类的行动是完全雷同的。然则,假如对范例 T 运用值范例,则须要斟酌完成和装箱题目。
“增加到 ArrayList 中的任何援用或值范例都将隐式地向上强迫转换为 Object。假如项是值范例,则必需在将其增加到列表中时举行装箱操纵,在检索时举行作废装箱操纵。强迫转换以及装箱和作废装箱操纵都邑下降机能;在必需对大型鸠合举行轮回接见的情况下,装箱和作废装箱的影响异常显著。”
1、List的基本、经常使用要领:
声明:
1、List<T> mList = new List<T>();
T为列表中元素范例,如今以string范例作为例子
E.g.:List<string> mList = new List<string>();
2、List<T> testList =new List<T> (IEnumerable<T> collection);
以一个鸠合作为参数建立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) 增加一个元素
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位置增加一个元素
E.g.:mList.Insert(1, "Hei");
遍历List中元素:
foreach (T element in mList) T的范例与mList声明时一样 { Console.WriteLine(element); }
E.g.:
foreach (string s in mList) { Console.WriteLine(s); }
删除元素:
1、 List. Remove(T item)删除一个值
E.g.:mList.Remove("Hunter");
2、 List. RemoveAt(int index); 删除下标为index的元素
E.g.:mList.RemoveAt(0);
3、 List. RemoveRange(int index, int count);
从下标index最先,删除count个元素
E.g.:mList.RemoveRange(3, 2);
推断某个元素是不是在该List中:
List. Contains(T item) 返回true或false,很有用
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 () 默许是元素第一个字母按升序
E.g.:mList.Sort();
给List内里元素递次反转:
List. Reverse () 能够与List. Sort ()合营运用,到达想要的结果
E.g.:mList.Sort();
List清空:List. Clear ()
E.g.: mList.Clear();
取得List中元素数量:
List. Count () 返回int值
E.g.:
int count = mList.Count();
Console.WriteLine("The num of elements in the list: " +count);
2、List的进阶、壮大要领:
举例用的List:
string[] temArr = { Ha","Hunter", "Tom", "Lily", "Jay", "Jim", "Kuku", " "Locu" };
mList.AddRange(temArr);
List.Find 要领:搜刮与指定谓词所定义的前提相婚配的元素,并返回全部 List 中的第一个婚配元素。
public T Find(Predicate<T> match);
Predicate是对要领的托付,假如通报给它的对象与托付中定义的前提婚配,则该要领返回 true。当前 List 的元素被逐一通报给Predicate托付,并在 List 中向前挪动,从第一个元素最先,到末了一个元素完毕。当找到婚配项时处置惩罚即住手。
Predicate 能够托付给一个函数或许一个拉姆达表达式:
托付给拉姆达表达式:
E.g.:
string listFind = mList.Find(name => //name是变量,代表的是mList { //中元素,本身设定 if (name.Length > 3) { return true; } return false; }); Console.WriteLine(listFind); //输出是Hunter
托付给一个函数:
E.g.:
string listFind1 = mList.Find(ListFind); //托付给ListFind函数
Console.WriteLine(listFind); //输出是Hunter
ListFind函数:
public bool ListFind(string name) { if (name.Length > 3) { return true; } return false; }
List.FindLast 要领:搜刮与指定谓词所定义的前提相婚配的元素,并返回全部 List 中的末了一个婚配元素。
public T FindLast(Predicate<T> match);
用法与List.Find雷同。
List.TrueForAll要领: 肯定是不是 List 中的每一个元素都与指定的谓词所定义的前提相婚配。
public bool TrueForAll(Predicate<T> match);
托付给拉姆达表达式:
E.g.:
bool flag = mList.TrueForAll(name => { if (name.Length > 3) { return true; } else { return false; } } ); Console.WriteLine("True for all: "+flag); //flag值为false
托付给一个函数,这里用到上面的ListFind函数:
E.g.:
bool flag = mList.TrueForAll(ListFind); //托付给ListFind函数
Console.WriteLine("True for all: "+flag); //flag值为false
这两种要领的结果是一样的。
List.FindAll要领:检索与指定谓词所定义的前提相婚配的一切元素。
public List<T> FindAll(Predicate<T> match);
E.g.:
List<string> subList = mList.FindAll(ListFind); //托付给ListFind函数 foreach (string s in subList) { Console.WriteLine("element in subList: "+s); }
这时候subList存储的就是一切长度大于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); }
这时候takeList寄存的元素就是mList中的前5个
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); }
这时候subList存储的就是一切长度大于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); }
这时候mList存储的就是移除长度大于3以后的元素。
List<T> 是一个泛型链表...T示意节点元素范例
比方
List<int> intList;示意一个元素为int的链表
intList.Add(34); //增加
intList.Remove(34);//删除
intList.RemoveAt(0); //删除位于某处的元素
intList.Count; //链表长度
另有Insert,Find,FindAll,Contains等要领,也有索引要领 intList[0] = 23;
1.减少了装箱拆箱
2.便于编译时搜检数据范例
List<Object> 就相当于 System.Collections定名空间内里的List
更多C# List<T>的用法小结相干文章请关注ki4网!