第八章:数组和集合
- 格式:ppt
- 大小:2.89 MB
- 文档页数:38
数组和集合的区别所谓数组,是有序的元素序列,在C#语⾔中,数组可以存放任意多个同类型数据,但是⼀个数组在创建后,它的长度将固定不变,不能增加、也不能减少数据,这就是它的定长性。
所有就有了更灵活的集合,集合能够保存的数据不定长,可以在程序执⾏的过程中,不断的发⽣变化,任意增加、或减少、或修改。
在功能上,数组能实现的所有功能,集合都能实现,反之则不⾏。
在声明与赋值⽅⾯:数组声明:数据类型[] 变量名例如:int[] numbers =new int[5]; //定义了⼀个numbers变量,它是⼀个数组可以存放5个int类型的数据 集合声明:List<数据类型>变量名; 例如:List<int> nums=new List<int>();集合还可以任意添加、删除、修改元素,实现如下://添加元素:变量名.Add(要添加的数据);List<int> nums=new List<int>{3,5,7};nums.Add(3);//插⼊元素:变量名.Insert(索引,要插⼊的数据);List<int> nums=new List<int>{3,5,7};nums.Insert(1,10);//删除元素:变量名.RemoveAt(索引); -->删除指定索引位置的元素//变量名.Remove(数据); -->删除集合中与填写的数据相同的第⼀个匹配项List<int> nums=new List<int>{1,1,2,3,5};nums.RemoveAt(2); //删除索引为2的元素nums.Remove(1); //删除与数据1相同的第⼀个元素//修改元素:变量名[索引]=值;//获取元素数量(获取集合长度):变量名.Count ⽰例1:数组分析器Console.Write("请输⼊数组的长度:");int len = int.Parse(Console.ReadLine());int[] nums = new int[len];#region 给数组赋值for (int i=0;i<len;i++) //给数组赋值{Console.Write("请输⼊数组的第"+(i+1)+"项:");nums[i] = int.Parse(Console.ReadLine());}Console.Clear();#endregion#region 对数组进⾏排序并输出Console.WriteLine("您输⼊的数字排序后如下:"); //对数组进⾏排序并输出for (int i = 0; i < len; i++){for (int j = i + 1; j < len; j++){if (nums[i] > nums[j]){int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}}Console.Write(nums[i]+"\t");}Console.WriteLine();#endregion#region 判断奇数并输出Console.WriteLine("其中,以下数字是奇数:"); //判断奇数并输出for (int i = 0; i < len; i++){if (nums[i] % 2 != 0){Console.Write(nums[i]+"\t");}}Console.WriteLine();#endregion#region 判断质数并输出Console.WriteLine("以下数字是质数:"); //判断质数并输出bool isFind=true;for (int i = 0; i < len; i++){for (int j = 2; j < nums[i]; j++){if (nums[i] % j == 0){isFind = false;break;}}if(isFind)Console.Write(nums[i]+"\t");isFind = true;}#endregionConsole.ReadLine(); ⽰例2:集合管理器List<int> arrays = new List<int>();while (true) //⽆限循环{Console.WriteLine("集合中现有内容如下:"); Console.WriteLine("==============================================="); if (arrays.Count == 0) //当集合⾥没有值的时候{Console.WriteLine("集合中没有元素");}else{foreach (int array in arrays){Console.Write(array + "\t"); //遍历,显⽰集合的值}Console.WriteLine();} Console.WriteLine("===============================================");Console.WriteLine("1.添加数据"); //获取⽤户输⼊Console.WriteLine("2.删除数据");Console.WriteLine("3.修改数据");Console.WriteLine("4.升序排序");Console.WriteLine("0.退出程序");Console.Write("请选择(0-4):");string input = Console.ReadLine();if (input == "0") //⽤户输⼊0,则推出程序{break;}else if (input == "1") //⽤户输⼊1,则添加数字{Console.Write("请输⼊要添加的数字:");arrays.Add( int.Parse(Console.ReadLine()));}else if (input == "2") //⽤户输⼊2,则删除数字{if (arrays.Count == 0){Console.Write("集合中没有可删除的数据,按回车继续");Console.ReadLine();}else{Console.WriteLine("请输⼊你要删除的数据(只会删除第⼀个匹配项):");arrays.Remove(int.Parse(Console.ReadLine()));}}else if (input == "3") //⽤户输⼊3,则修改数字{if (arrays.Count == 0){Console.Write("集合中没有任何数据可以修改,按回车键继续");Console.ReadLine();}else{Console.Write("请输⼊要删除的下标0-" + (arrays.Count - 1) + ":");int index = int.Parse(Console.ReadLine());if (index > (arrays.Count - 1)){Console.Write("输⼊错误,下标超出范围,按回车键继续");Console.WriteLine();}else{Console.Write("请输⼊新的数据:");arrays[index] = int.Parse(Console.ReadLine());}}}else if (input == "4") //⽤户输⼊4,则排序 {if (arrays.Count == 0){Console.Write("集合中没有元素,回车继续"); Console.ReadLine();}for (int i = 0; i < arrays.Count; i++){for (int j = i + 1; j < arrays.Count; j++){if (arrays[i] > arrays[j]){int temp = arrays[i];arrays[i] = arrays[j];arrays[j] = temp;}}}}Console.Clear(); //每⼀个循环结束后清屏。
集合与数组详解⼀、数组与集合的基础介绍: 1.数组 (1)同⼀组数据类型的集合,其实数组就是⼀个容器。
(2)数组的好处在于可以对内部元素从0开始进⾏索引编号,⽅便对内部元素进⾏操作。
(3)数组的声明: int[ ] name=new int[ X ]; int为声明数组所存储的元素类型,name为声明数组的名称,x为数组所包含具体⼏个元素; 另外还可以⽤以下⽅式声明数组: int[ ] name=new int[ ]{元素1,元素2 }; int[ ] name={ 元素1,元素2 }; 这样声明数组还将数组内具体元素都进⾏了表⽰。
(4)数组的具体操作 数组最常⽤的操作就是通过索引取元素 name[ index ],name为数组名称,index为索引,要牢记数组是固定长度固定类型的容器。
2.集合 (1)集合存放于java.util包中,集合类中存放的都是对象的引⽤并没有存放具体的对象内容,我们称集合中的对象就是指对象的引⽤,集合中主要包含三类接⼝,Set(集)、List(列表)、Map(映射)。
Collection接⼝是集合类的根接⼝,Java中没有提供这个接⼝的直接的实现类。
但是却让其被继承产⽣了两个接⼝,就是Set和List。
Set中不能包含重复的元素。
List是⼀个有序的集合,可以包含重复的元素,提供了按索引访问的⽅式。
Map是Java.util包中的另⼀个接⼝,它和Collection接⼝没有关系,是相互独⽴的,但是都属于集合类的⼀部分。
Map包含了key-value对。
Map不能包含重复的key,但是可以包含相同的value。
Iterator,所有的集合类,都实现了Iterator接⼝,这是⼀个⽤于遍历集合中元素的接⼝,主要包含以下三种⽅法: <1>hasNext()是否还有下⼀个元素。
<2>next()返回下⼀个元素。
<3>remove()删除当前元素。
数组和集合的关系
数组和集合都是用来存储一组数据的数据结构,但它们之间有一些区别。
首先,数组是一个连续的内存块,每个元素都有一个唯一的下标来访问它。
数组的长度是固定的,在创建时就确定了,不能动态地改变。
数组的操作速度较快,因为它是在内存中连续存储的。
相比之下,集合是一个无序的数据结构,其中的元素没有固定的顺序。
集合中的元素可以动态地添加和删除,它的长度是可变的。
集合的操作速度较慢,因为它不是在内存中连续存储的,需要进行搜索。
数组和集合还有一些其他的区别。
例如,数组可以存储基本数据类型和对象类型,而集合只能存储对象类型。
另外,数组可以使用下标来访问元素,而集合必须使用迭代器来遍历元素。
在实际编程中,我们需要根据具体的情况选择使用数组还是集合。
如果我们需要按照固定顺序存储一组数据,并且需要快速访问它们,那么数组是一个不错的选择。
但是如果我们需要动态地添加和删除元素,或者需要对元素进行排序和搜索,那么集合更适合。
- 1 -。
数组和集合的应用场景与实际应用情况1. 应用背景在软件开发和数据处理领域,数组和集合是常用的数据结构。
它们用于存储和管理大量的数据,并提供了各种操作和功能,能够满足不同的业务需求。
数组和集合能够对数据进行高效地存储和访问,同时还可以进行数据的排序、查找、过滤和统计等处理。
它们的使用广泛应用于各个行业和领域,如金融、电商、社交网络、物流等。
下面将详细介绍数组和集合在几个典型应用场景中的实际应用情况。
2. 应用过程(1) 数据库查询结果的处理在数据处理和数据库开发中,经常需要对查询结果进行进一步的处理和操作。
一般来说,查询结果会作为一个数据集合返回,而数组和集合能够方便地对这些数据进行存储和处理。
例如,在一个电商网站中,需要查询某个用户购买的所有商品,并统计每个商品的销量和总销售额。
首先,通过数据库查询语言(如SQL)获取满足条件的商品数据,然后将查询结果保存为数组或集合。
接下来,可以使用数组或集合的方法对数据进行排序、过滤和统计等操作。
通过迭代遍历数组或集合,可以获取每个商品的销量和价格,并进行相应的累加计算。
最后,得到的结果可以用于生成报表或提供其他业务需求。
(2) 购物车管理在电商应用中,购物车是用户选择和存放待购买商品的一个重要功能模块。
通常,在用户浏览商品页面时,可以将选中的商品添加到购物车中,并随时对购物车中的商品进行数量的增减、删除等操作。
购物车中的商品数据可以使用数组或集合来存储。
当用户添加商品到购物车时,可以将商品对象保存到数组或集合中,并根据需要记录商品的数量、价格等信息。
对于购物车中的商品,可以使用数组或集合的方法进行增删改查的操作。
用户可以根据自己的需求对购物车中的商品进行增加、删除、修改等操作。
当用户结账时,可以遍历购物车中的商品数据,计算总金额、优惠金额等,并生成订单。
(3) 排序和查找算法排序和查找是算法和数据结构中的经典问题,也是数组和集合的重要应用场景之一。
在实际应用中,需要对大量的数据进行排序和查找,以快速找到所需的结果。
计算机等级考试二级C语言高频考点(C语言部分)第一章C语言基本知识【考点1】C程序用C语言编写的程序称为C语言源程序,源程序文件的后缀名为“.c”。
源程序经编译后生成后缀名为“.obj”的目标文件,再把目标文件与各种库函数连接起来,生成“.exe”可执行文件。
C语言有三种基本结构:顺序结构、选择结构、循环结构。
【考点2】main函数又称主函数,是C程序的入口。
main后面跟一对小括号和一对花括号,花括号括起来的部分称为main函数的函数体。
一个C程序从main函数开始执行,到main函数体执行完结束,而不论main函数在整个程序中的位置如何。
每一个程序有且仅有一个main函数,其他函数都是为main函数服务的。
【考点3】存储形式计算机在电脑中保存数据是采用二进制形式,由0或1构成的二进制称为位(bit),八个位构成一个字节(Byte),1个Byte=8个bit。
二进制、八进制、十六进制转化为十进制采用乘法,十进制转化为二进制、八进制、十六进制采用除法。
数据的存放位置就是它的地址。
【考点4】注释是对程序的说明,可出现在程序中任意合适的地方,注释从“/*”开始到最近一个“*/”结束,其间任何内容都不会被计算机执行,注释不可以嵌套。
【考点5】书写格式每条语句的后面必须有一个分号,分号是语句的一部分。
一行内可写多条语句,一个语句可写在多行上。
【考点6】标识符是标识名字的有效字符序列,可以理解为C程序中的单词。
标识符的命名规则是:(1)标识符只能由字母、数字和下划线组成,字母区分大小写。
(2)标识符的第一个字符必须是字母或下划线,不能为数字。
C语言标识符分如下3类(1)关键字。
它们在程序中有固定的含义,不能另作他用。
如int、for、switch 等。
(2)预定义标识符。
预先定义并具有特定含义的标识符。
如define、include 等。
(3)用户标识符。
用户根据需要定义的标识符,符合命名规则且不与关键字相同。
数组与集合数组和集合在.Net Framework都表现为对同类型的聚合数据进行组织和管理。
但它们在实现时所使用的设计思想和实现手段是有所差异的。
一、聚合数据的存储分配方案从存储结构上,可以将聚合数据的存储方式分为顺序存储和链式存储。
1、顺序存储和链式存储在同类型的聚合数据中,由于每个元素的类型相同,也就是说每个元素所需占据的存储空间大小相同,因此,可通过元素总数和元素类型计算出存储该聚合数据所需存储空间的大小。
这样,在它要求在进行存储之前,可根据元素类型和总数在内存中先开辟可容纳所有元素的定长存储空间,然后再按元素在聚合数据中的位置关系依次实现每个元素的存储。
当使用这种方式实现聚合数据的存储时称为顺序存储。
其存储结构可用下图表示:顺序存储采用连续的存储单元存储聚合数据,具有如下特点:(1)由于相邻元素的存储位置也是相邻的,因此无需额外的存储空间表示元素间的逻辑关系,达到物理位置和逻辑位置上的统一。
(2)可随机存取每个元素,查询效率较高。
(3)由于采用定长存储空间,容量难以扩充。
(4)由于要求使用连续的存储单元,因此只能按最大需求原则进行存储分配,有可能致使存储空间不能充分利用。
(5)在进行插入和删除操作过程中常需复制原有元素,操作不简便,执行效率低。
在程序设计语言中,通常使用数组这个概念来表示顺序存储机制的使用。
由于顺序存储在存储聚合数据时要预先分配定长的存储空间,且对聚合数据进行增加或减少时,执行效率低。
因此,当不能预先确定聚合数据中元素总数并希望能高效实现聚合数据的增减时,还可以使用一种称为链式存储结构来实现。
链式存储是采用随机可用的存储单元实现聚合数据的存储。
它在实现元素存储时,将存储空间分成数据区和地址区两个部分,其中,数据区存放聚合数据中的元素,地址区存放相邻元素的存储地址信息。
通过这种链接方式实现聚合数据存储时,它不要求在存储之前先开辟可容纳所有元素的连续存储单元,但需要额外的存储单元存放相邻元素的存储地址信息。
数组和集合5.1数组数组可以看成是多个相同类型数据的集合,这些数据称为数组元素,数组元素之间是有先后顺序的。
一个数组元素可以用数组的名字和这个元素在数组中的顺序位置来表示。
例如,a[0]表示数组a中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
这个顺序位置通常又称为数组的下标,数组的下标是从0开始的。
在Java语言中,数组就是对象,数组元素可以看成数组对象的成员变量,数组元素既可以是基本数据类型的,也可以是引用数据类型的。
需要注意的一点是:虽然数组是对象,但是J2SE API中却没有提供数组类,所有的数组类都是JVM动态创建的。
5.1.1 数组的创建在Java语言中,定义一维数组引用的语法格式是“type var[ ]”或者是“type[ ] var”。
例如,定义一个int类型的一维数组引用a:“int a[]”或者是“int[] a”,定义一个Person类型的一维数组引用p,代码为“Person p[]”或“Person[] p”。
注意:定义一个数组引用只是在Stack栈中创建了一个引用,而且这个引用的值是null,此时并没有创建数组对象。
在Java语言中,创建一维数组对象的语法格式是“new type[length]”。
例如,创建一个包含5个int类型元素的数组对象的代码为“new int[5]”,创建一个包含3个Person类型元素的数组对象的代码为“new Person[3]”。
注意:创建的数组对象是存放在Heap堆中的,而且数组对象中的数组元素都是有默认初始值的,例如,int类型的数组元素默认初始值是0,引用类型的数组元素默认初始值是null。
所以,在Java语言中,创建一维数组的语法格式通常如下所示:type[] var = new type[length]也可以在创建数组的同时,设置数组元素的初始值,比如:int[] a = { 1, 2, 3, 4, 5 };接下来,我们来看看基本数据类型数组和引用类型数组的区别,下段代码中创建了一个包含3个int类型元素的数组对象a,创建了一个包含3个Person类型元素的数组对象p,代码如下所示:int[] a = new int[3];Person[] p = new Person[3];执行完上段代码后,内存中的相关数据如图5-1所示。