using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace List泛型集合 { class Program { static void Main(string[] args) { //ArrayList的好處是長度可變,可以往里面放任意類型的數據。但是當我們從ArrayList中取數據的時候,取出來的全部是Object類型的數據,最終還要將這個Object類型的數據轉換成我們需要的類型數據。這期間就可以發生拆箱操作。費時間。而List泛型集合就能很好的解決這個問題。 //--------------------------------------Add(); AddRange()添加 //一旦你確定了泛型集合的類型,那么泛型集合里就只能存放該類型數據了。 //創建泛型集合對象 List<int> list = new List<int>(); list.Add(1); //單List的類型是int的時候。Add(int item) Add方法的參數是int類型的。說明只能網里面存int類型的數據 List<string> listStr = new List<string>(); listStr.Add("abc");//單List的類型是string的時候。Add(string item) Add方法的參數是string類型的。說明只能網里面存string類型的數據 List<int[]> listArray = new List<int[]>(); //list里面接收的是一個int[]數組。 listArray.Add(new int[] { 1, 2, 3 }); List<int[]> listIEnumerable = new List<int[]>(); //AddRange(IEnumerable<int[]> collection); AddRange()方法的參數接收的是一個List<int[]>的集合。 listIEnumerable.AddRange(new List<int[]>() { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 } });// //--------------------------------------listInt() ;InsertRange()添加 List<int> listInt = new List<int>() { 1, 2, 3 }; listInt.Insert(0, 5); //從listInt這個泛型集合索引下標的0處插入一個5 //InsertRange(int Index, IEnumerable<int> collection) listInt.InsertRange(1, new List<int> { 4, 5, 6 });//從listInt這個泛型集合索引下標的1處插入一個List<int>集合 foreach (int i in listInt) { Console.WriteLine(i); //輸出5,1,2,3 } //--------------------------------------Remove();RemoveRange()刪除 List<int> listInt2 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 }; listInt2.Remove(1); //Remove(int item) 刪除listInt2集合中 “1” 這個元素。 listInt2.RemoveAt(0);//RemoveAt(int index) 刪除listInt2集合中索引下標為0的這個元素 listInt2.RemoveRange(0, 2);//RemoveRange(int index,int count) 刪除一定范圍內的元素。從索引下標0處開始刪除,總共刪除2個元素。 //RemoveAll(Predicate<int> math) //接收的是一個拉姆達表達式 listInt2.RemoveAll(p => p > 2 && p <= 5); //刪除listInt2集合中 大於2並且小於等於5之間的元素 foreach (int i in listInt2) { Console.WriteLine(i); } //--------------------------------------Clear()清空所有元素 List<int> listInt3 = new List<int>() { 1, 2, 3, 4, 5, 6 }; listInt3.Clear(); //--------------------------------------Contaion()包含 List<int> listInt4 = new List<int>() { 1, 2, 3, 4, 5, 6 }; bool b = listInt4.Contains(2); //Contains(int item) 檢查listInt4泛型集合中是否包含了“2”這個元素。如果包含就返回true 不包含就返回false //--------------------------------------First();如果集合沒有任何元素,會拋異常 List<int> listInt5 = new List<int>() { 1, 2, 3, 4, 5, 6 }; //假如listInt5這個泛型集合沒有任何一項元素。那么調用First方法就會報錯。提示:序列不包含任何元素 //First()方法的返回值為int類型 int t1 = listInt5.First();//返回listInt5這個泛型集合中第一個元素 t1的值為1。假如當listInt5這個泛型集合沒有包含任何元素的時候,即: //List<int> listInt5 = new List<int>() { }; //int t1 = listInt5.First(); 這里會報錯:提示:序列不包含任何元素 // First()方法的返回值為int類型。返回滿足拉姆達表達式的第一個元素 int t2 = listInt5.First(r => r > 4); //t2的值為5 //FindAll()方法返回值為一個List<int> 泛型集合 。返回滿足拉姆達表達式的所有元素 List<int> t3 = listInt5.FindAll(r => r < 5); //t3的元素為 1,2,3,4 //--------------------------------------Single();如果集合沒有任何元素,會拋異常,如果大於一個元素也會拋異常 List<int> listInt8 = new List<int>() { 1, 2, 3, 4, 5, 6 }; //返回序列中滿足指定條件的唯一元素;如果有多個這樣的元素存在,則會引發異常 int t8 = listInt8.Single(r => r > 3); //這里會拋異常:提示:序列包含一個以上的匹配元素。因為listInt8泛型集合里有4,5,6等元素是大於3的。 int tt8 = listInt8.Single(r => r > 5);//tt8的值為6。 不會拋異常。因為listInt8泛型集合里只有,6等元素是大於5的。 int tt88 = listInt8.Single(); //會拋異常:提示:序列包含一個以上的匹配元素。 //如果 List<int> listInt8 = new List<int>() { 1}; //int tt88 = listInt8.Single();泛型集合里只包含一個元素的時候,調用Single()方法就不會拋異常了。 //--------------------------------------FirstOrDefault(); //如果集合沒有任何元素,不會拋異常 List<int> listInt5A = new List<int>() { 1, 2, 3, 4, 5, 6 }; //假如listInt5A這個泛型集合沒有任何一項元素。那么FirstOrDefault方法的默認返回值為0 而不會報錯。 int tt1 = listInt5A.FirstOrDefault(); //返回listInt5A這個泛型集合中第一個元素 tt1的值為1。假如單listInt5A這個泛型集合里沒有任何元素的時候 ,即: //List<int> listInt5A = new List<int>(){}; //int tt1 = listInt5A.FirstOrDefault(); //tt1的值為默認為0 ;而不會報錯。(這里之所以默認值為0是因為litInt5A是一個int類型的泛型集合。而int的默認值就是0 如果listInt5A是一個string類型的泛型集合的話。那么tt1的默認值就是null。因為string類型的默認值就是null) //Console.WriteLine("tt1的值為{0}", tt1); //輸出:tt1的值為0 int tt2 = listInt5A.FirstOrDefault(r => r > 2); //返回滿足括號中朗姆達表達式的第一個值:listInt5A這個泛型集合中只有3,4,5,6 等元素>2 ;所以既然是返回滿足朗姆達表達式的第一個值。所以tt2的值為3 int tt3 = listInt5A.FirstOrDefault(r => r == 8); Console.WriteLine("tt3的值為", +tt3);//輸出: tt3的值為 即:tt3的值為空 因為listInt5A里沒有8這個元素。所以找不到。既然找不到8這個元素,所以就什么都不會輸出了。 //======================================================== //Find方法和FirstOrDefault方法效果相同,都是返回滿足條件的第一個元素,如果沒有該元素,則返回null。 //1>Find方法是.netFramework2.0的,而FirstOrDefault是3.5的。 //2>Find方法只能在List<T>上使用,而后者能更廣泛應用在IEnemerable<T>上。 //>Find最終是建立在Array的查找之上,而在IEnemerable上的FirstOrDefault是使用foreach查找的。因此,Find速度會比FirstOrDefault快很多,據測試可能會快一倍以上。 //========================================================= //--------------------------------------Find(); //如果集合沒有任何元素,不會拋異常 List<int> listInt6 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //假如listInt6這個泛型集合沒有任何一項元素。那么Find方法的默認值返回值為0 而不會報錯。 int t4 = listInt6.Find(r => r < 6); //返回滿足括號中朗姆達表達式的第一個元素 ;listInt6泛型集合中有1,2,3,4,5等元素是<6的 ,既然是返回滿足朗姆達表達式的第一個值 所以:t4的值為1 int t5 = listInt6.Find(r => r > 6); //listInt6泛型集合中有7,8,9等元素的值是>6的。既然是返回滿足朗姆達表達式的第一個值 所以:t4的值為7 List<int> t6 = listInt6.FindAll(r => r > 2);//listInt6泛型集合中有3,4,5,6,7,8,9等元素的值是>2的。所有t6的元素為3,4,5,6,7,8,9 //--------------------------------------Any() 只要有一個元素滿足條件就返回true。否則返回false List<int> listInt7 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //Any()檢查listInt6泛型集合中的元素是否滿足括號中的拉姆達表達式。只要有一個元素滿足條件就返回true。否則返回false bool b1 = listInt7.Any(r => r < 8); //b1的值為true;因為listInt7中有1,2,3,4,5,6,7等元素小於8 bool b2 = listInt7.Any(r => r > 8); //b2的值為true;因為listInt7中 元素9是大於8的 bool b3 = listInt7.Any(r => r > 10);//b3的值為false;因為listInt7中,沒有任何一個元素大於10 //--------------------------------------ToArray() 將List<T>泛型集合轉換成數組 List<int> listInt9 = new List<int>() { 1, 2, 3, 4, 5, 6 }; int[] arr = listInt9.ToArray(); //將一個list<int> 泛型集合轉換成一個int類型的數組;這里可以轉換是因為,List<int>里存放的數據本身就是int類型的 //--------------------------------------ToList() 將數組轉換成List<T>泛型集合 int[] arr1 = new int[] { 1, 2, 3, 4, 5, 6 }; List<int> arrTolist = arr1.ToList(); //將一個int[]類型數組轉換成List<int>泛型集合;這里可以轉換是因為,List<int>里存放的數據是int類型的。而arr數組存放的數據也是int 類型的 //--------------------------------------Reverse() 元素反轉 List<int> listInt10 = new List<int>() { 1, 2, 8, 4, 5, 6 }; listInt10.Reverse(); //將listInt7這個泛型集合里的元素順序反轉。注意:是反轉,不是降序排序 //--------------------------------------Sort() 升序排序 List<int> listInt11 = new List<int>() { 2, 8, 4, 1, 6, 5, 3, 7 }; listInt11.Sort(); //將listInt8這個泛型集合里的元素按照升序排序 Console.WriteLine("---------------"); foreach (int i in listInt11) { Console.WriteLine(i); //輸出:1,2,3,4,5,6,7,8 } Console.ReadKey(); } } }