1. ArrayList与数组
数组的长度不可变,元素的类型单一;
ArrayList 实际上相当于一个可变长度的动态数组,由于集合中的元素都是object类型,元素的类型可以有多种了;与数组一样,都可以用下标来访问元素。
2. ArrayList的常用的方法
ArrayList list = new ArrayList();
1)添加元素到集合
为集合添加单个元素: list.Add(1);
将集合添加到集合中: list.AddRange(new int[] { 0, 1, 2, 3, 4 }); //将数组添加到集合中
list.AddRange(list1); //将另一个集合中所有的元素添加到集合中
调用Add方法后,添加的元素都被转换为object类型,这里就包含了里氏转换原则。
2)删除集合中元素
list.Remove(1); //删除集合中第一个值为1的元素;删除单个元素,写谁就删谁。
list.RemoveAt(0); //根据下标来删除元素 删除第0个元素后,后面的元素会自动移到前面来
list.RemoveRange(2, 4); //从2位置开始,删除4个的元素
3)确定元素是否在集合中
if ( !list.Contains("windrunner") )
4)将元素插入到集合中
list.Insert(2, "插入的元素"); //在指定位置插入一个元素
list.InsertRange(3, new string[] {"王五","赵六","洪七"}); //在制定位置插入一个集合
5) 对集合中元素进行排列
list.Sort(); //升序排列,前提:集合中所有的元素必须是可以互相比较的类型;假如集合中同时存在int和string类型,则无法比较。
6) 将整个集合中元素的顺序反转
list.Reverse(); //如 1 2 3 变成 3 2 1
7)清空所有的元素
list.Clear();
3. ArrayList集合的长度问题
每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,
集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用。
4. ArrayList集合的两个练习
1 //创建一个集合,里面添加一些数字,求平均值与和,最大值 2 ArrayList list1 = new ArrayList(); 3 list1.AddRange(new int[] { 10, 20, 65, 4, 5, 32, 788, 66, 9 }); 4 int sum = 0; 5 int max = (int)list1[0]; //如果不加(int)来转换,会报错,因为不能将object类型的数据赋值给int变量 6 foreach (int item in list1) 7 { 8 sum += item; 9 if ( item > max) 10 { 11 max = item; 12 } 13 14 //如果使用for循环,sum += (int)list1[i] 需要将object类型转换为int类型 15 //使用foreach 的好处就在这里 16 //这里实际上是里氏转换原则,1. object是int的父类,2. 集合中的元素表现出来的时候是object类型,但实际上装的是int类型 17 } 18 19 Console.WriteLine("这个集合中所有数字的和是{0},平均值是{1}", sum, sum / list1.Count); 20 21 //写一个长度为10的集合,要求在里面随机地存放10个数字(0 - 9),但是要求所有的数字不重复 22 ArrayList list2 = new ArrayList(); 23 int[] array = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 24 ArrayList listTemp = new ArrayList(array); 25 Random random = new Random(); 26 for (int i = 0; i < 10; i++) 27 { 28 int index = random.Next(0, listTemp.Count); 29 list2.Add(listTemp[index]); 30 listTemp.RemoveAt(index); 31 } 32 33 for (int i = 0; i < list2.Count; i++) 34 { 35 Console.WriteLine(list2[i]); 36 } 37 Console.WriteLine(); 38 39 ArrayList list3 = new ArrayList(); 40 for (int i = 0; i < 10; i++) 41 { 42 int rNumber = random.Next(0, 10); 43 if (!list3.Contains(rNumber)) 44 { 45 list3.Add(rNumber); 46 } 47 else 48 { 49 //产生了重复的随机数,本次循环无效 50 i--; 51 } 52 } 53 for (int i = 0; i < list3.Count; i++) 54 { 55 Console.WriteLine(list3[i]); 56 }
5. 总结
ArrayList 集合: 在存储数据的时候很方便,但在取出数据的时候就比较麻烦。因为每次取出数据,都需要进行数据类型的转换。