C#里面的不同集合(数组、ArrayList集合、List泛型) |
您所在的位置:网站首页 › object数组可以存不同类型吗 › C#里面的不同集合(数组、ArrayList集合、List泛型) |
目录 数组(Array) 集合(ArrayList) 泛型(List) 那如何选择使用哪一个集合呢? 思维导图 数组(Array)什么是数组? 是一个存储相同类型元素的固定大小的顺序集合。 有什么作用吗? 一次声明相同类型的数。 有哪些特点? 元素是相同类型大小固定元素连续存储是引用类型(必须分配堆上的内存)数组有哪些优点? 在内存中连续存储,因此可以快速而容易地从头到尾遍历元素,可以快速地修改元素 数组有哪些缺点呢? 创建时必须要指定数组变量的大小,在两个元素之间添加元素比较困难。造成数组长度设置过大,内存空间浪费数组长度过小,溢出如何创建一个数组? //第一种方式 int[] num1 = new int[10]; //长度为10,下标为0-9,int类型 //第二种方式 int[] num2 = new int[] { 1,2,3,4,5}; //此数组就存5个值 //第三种方式 int[] num3 = new int[3] { 1, 2, 3 }; //个数和声明数必须一致。此数组就存3个值,值都清楚 //第四种方式 int[] num4 = { 1, 2, 3, 4, 5 }; //简写法怎么给数组赋值? int[] num1 = new int[10]; //长度为10,下标为0-9,int类型 num1[8] = 20; //给8这个地方赋个值 Console.WriteLine(num1[8]); Console.ReadKey();比方,盖一栋楼,一共有10层,有个开房的,它就去找6层房牌号为100的这个房间 如何遍历一个数组循环输出里面的内容 int[] nums = new int[5]; //声明一个数组 for (int i = 0; i < nums.Length; i++) //赋值 { nums[i] = 10; } for(int i = 0; i < nums.Length; i++) //取值 { Console.WriteLine(nums[i]); } Console.ReadKey();如何在数组的两个元素之间添加元素?★★★ 方法:使用泛型List,先将元素存入List中,最后使用ToArray()转成数组。链接:C#中如何向数组中动态添加元素 第一步、将int数组转成List int[] num = new int[] { 1, 2, 3, 4 }; //定义一个int类型数组,长度为4 List strList = new List(num); //将int数组转成泛型List strList.Add(5); //将要添加的元素存入泛型里面(这个方法默认是在结尾添加) strList.Insert(0, 9); //在指定索引处添加值第二步、List转int数组 int[] numm = strList.ToArray(); //将泛型转成数组 for (int i = 0; i < numm.Length; i++) //遍历数组元素 { Console.WriteLine(numm[i]); //输出数组的值 } Console.ReadKey(); //在控制台输出结果如何解决数组的这些问题呢? .NET Framework提供了用于数据存储和检索的专用类,这些类统称集合。这些类提供对堆栈、队列、列表和哈希表的支持。大多数集合类实现相同的接口。来克服这些缺点 集合(ArrayList)是什么? 动态数组。有序集合 有什么特点? 初始容量为0不用限定长度集合可以使用索引在指定的位置添加和移除项目,动态数组会自动调整它的大小在列表中进行动态内存分配、增加、搜索、排序各项集合的变量影响全局,始终保证元素的连续性集合ArrayList相比数组有什么好处吗?(数组和集合的区别有哪些?) 优点 缺点 数组 在内存中连续存储,快速修改元素 创建时长度固定动态添加元素困难排序得到冒泡排序ArrayList集合 不用限定长度随着元素添加,容量根据需要自动扩充在列表中进行动态内存分配、增加、搜索、排序各项ArrayList不是类型安全的可以将集合看作为“长度可变的,具有很多方法的数组” 有哪些缺点? ArrayList不管是什么对象都是接受的,因为在它眼里所有元素都是Object,这就使得如果‘arrayAnima.Add(123);’或者‘arrayAnima.Add("HelloWorld");’在编译时都是没有问题的,但在执行时,‘foreach(Animal item in arrayAnima)’需要明确集合中的元素是Anima类型,而123是整型,HelloWorld是字符串型,这就会在运行到此处时报错,显然,这是典型的类型不匹配错误,换句话说,ArrayList不是类型安全的。 ArrayList对于存放值类型的数据,比如int、string型(string是一种拥有值类型特点的特殊引用类型)或者结构struct的数据,用ArrayList就意味着都需要将值类型装箱为Object对象,使用集合元素时,还需要执行拆箱操作,带来很大的性能损耗。 装箱(boxing)、拆箱是什么? 装箱:把值类型“赋值”给引用类型拆箱:将引用类型“赋值”给值类型例子:比如整型变量i被“装箱”并赋值给对象o 装箱前,数据类型不必匹配,无法赋值: 装箱后: int a = 1; object b = (object) a; //boxing,分配并构造一个全新的对象 拆箱: o = 1; i=(int) o;如何使用集合? 命名空间:引用 System.Collections 常用的方法 Count:获取长度 arrayList.Clear(); 清空集合 arrayList.Contains(1); 判断这个集合中是否包含1这个元素 arrayList.Insert 插入 int num = arrayList.Count; 集合中元素的个数 int num = arrayList.IndexOf(2); 找某一个元素对应的索引 删除数据:Remove() 、RemoveAt() 、Clear() int[] nums = {1,2,3}; arrayList.InsertRange(4,nums); 往某一个索引位置插入一个数组 arraylist.AddRange(nums)里面可以放数组、集合 arrayList.LastIndexOf() ; 找最后一个元素的索引 arrayList.Remove(1); 移除某一个元素(只移除最开始出现的) arrayList.RemoveAt(1);移除索引对应的值 arrayList.RemoveRange(3,4) 从指定索引处开始移除,移除多少个,如果超出索引报异常 arrayList arrayList = new ArrayList(); for {int in = 0; int < 100 ; i++} //循环0-100的数 { arrayList.Add(i); //循环输出数 } arrayList.Reverse(); 反转 arrayList.Sort() 排序 实例 int[] nums = new int[] { 1, 2, 3, 4, 5, 6 }; //int类型数组 ArrayList arrayList = new ArrayList(); //实例化一个ArrayList集合对象 arrayList.Add(10); //往集合里面添加一个int类型的值10 arrayList.Add(20); //往集合里面添加一个int类型的值 arrayList.Add("小苏"); //往集合里面添加一个string类型的值 arrayList.Add('女'); //往集合里面添加一个char类型的值 arrayList.Add(true); //往集合里面添加一个bool类型的值 arrayList.Add(3.15m); //往集合里面添加一个decimal类型的值 arrayList.Add(78.9); //往集合里面添加一个double类型的值 arrayList.Add(nums); //往集合里面添加一个数组 //Person per = new Person("小杨",'男',18); //arrayList.Add(per); //可以写成: arrayList.Add(new Person("小杨", '男', 18)); //往集合里面添加一个类 for (int i = 0; i < arrayList.Count; i++) //遍历这个集合,i++ { if (arrayList[i] is int[]) //如果集合i里面的元素能够转换为int类型,强转 { int[] numbers = (int[])arrayList[i]; //就把集合里面的元素赋给这个数组numbers for (int j = 0; j |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |