5-1、Java数组

上传人:痛*** 文档编号:153195095 上传时间:2022-09-17 格式:PPT 页数:18 大小:191.50KB
收藏 版权申诉 举报 下载
5-1、Java数组_第1页
第1页 / 共18页
5-1、Java数组_第2页
第2页 / 共18页
5-1、Java数组_第3页
第3页 / 共18页
资源描述:

《5-1、Java数组》由会员分享,可在线阅读,更多相关《5-1、Java数组(18页珍藏版)》请在装配图网上搜索。

1、第第5讲讲 数数 组组数组数组一、声明一维数组一、声明一维数组:声明一个一维数组的一般形式为:声明一个一维数组的一般形式为:类型类型 数组名数组名;或或 类型类型 数组名数组名;相同类型的组数据对象。相同类型的组数据对象。数组是对象。数组是对象。声明原始或类的类型的数组:声明原始或类的类型的数组:char s;Point p;char s;Point p;数组的声明数组的声明创建了一个引用的空间创建了一个引用的空间。实际的内存分配由实际的内存分配由 new 语句或数组初始化程序动态完成。语句或数组初始化程序动态完成。与其他高级语言不同,与其他高级语言不同,Java在数组声明时并不为数组分配存在

2、数组声明时并不为数组分配存储空间,因此,在储空间,因此,在声明声明的的中中不能指出数组中元素的个数不能指出数组中元素的个数(数组长度)(数组长度);必须经过初始化、分配存储空间创建数组后,才能访问数组必须经过初始化、分配存储空间创建数组后,才能访问数组的元素的元素。当仅有数组声明,而未分配存储空间时,数组变量。当仅有数组声明,而未分配存储空间时,数组变量中只是一个值为中只是一个值为null的空引用(指针)。的空引用(指针)。5.1 数组的定义与引用数组的定义与引用二、创建一维数组对象二、创建一维数组对象:(1)数组初始化数组初始化 声明同时指定初始值。一维数组初始化的形式如下:声明同时指定初始

3、值。一维数组初始化的形式如下:类型类型 数组名数组名=元素元素1,元素元素2 基本类型和字符串类型等可以用这种方式创建数组空间基本类型和字符串类型等可以用这种方式创建数组空间。例如:例如:int ia =1,2,3,4,5;double da =1.1,2.2,3.3;String sa =Java,BASIC,FORTRAN;在数组声明时,用大括号给出数组元素的初值,系统将自动在数组声明时,用大括号给出数组元素的初值,系统将自动按照所给初值的个数计算出数组的长度并分配存储空间。按照所给初值的个数计算出数组的长度并分配存储空间。(2)使用使用new运算符运算符 若数组已经声明,为已声明数组分配

4、空间的一般形式如下:若数组已经声明,为已声明数组分配空间的一般形式如下:数组名数组名=new 类型类型数组大小数组大小;若数组未声明,在声明的同时用若数组未声明,在声明的同时用new为数组分配空间:为数组分配空间:类型类型 数组名数组名 =new 类型类型数组大小数组大小;三、数组的引用三、数组的引用一维数组的引用分为数组一维数组的引用分为数组元素的引用元素的引用和和数组的引用数组的引用,大部分时候都是数组,大部分时候都是数组元素的引用。一维数组元素的引用方式为:元素的引用。一维数组元素的引用方式为:数组名数组名下标下标 其中:其中:下标是下标是int类型的,也可以是类型的,也可以是byte、

5、short、char等类型,但不允等类型,但不允许为许为long类型类型。下标的取值从下标的取值从0开始,直到数组的长度减开始,直到数组的长度减1。元素的引用与同类型的变量相同,每一个数组元素都可以用在同类变量被元素的引用与同类型的变量相同,每一个数组元素都可以用在同类变量被使用的地方。使用的地方。Java对数组元素要进行越界检查以保证安全性。若数组元素下标越界将产对数组元素要进行越界检查以保证安全性。若数组元素下标越界将产生下面的异常:生下面的异常:ArrayIndexOutOfBoundsException对于对于每个数组都有一个指明数组长度的属性每个数组都有一个指明数组长度的属性leng

6、th,它与数组的类型无关。它与数组的类型无关。public void printElements(int list)for(int i=0;i list.length;i+)System.out.println(listi);public char createArray()char s;s=new char26;for(int i=0;i26;i+)si=(char)(A+i);return s;堆内存中数组:堆内存中数组:四、复合类型数组元素的动态空间分配和初始四、复合类型数组元素的动态空间分配和初始化化 复合类型的数组复合类型的数组需要进一步对数组元素用需要进一步对数组元素用new运算符

7、分配空间运算符分配空间分配并初始化操作分配并初始化操作。设已声明一个引用类型的数组:设已声明一个引用类型的数组:类型类型 数组名数组名;对数组的动态空间分配对数组的动态空间分配步骤如下步骤如下:(1)为数组分配每个元素的引用空间为数组分配每个元素的引用空间 数组名数组名=new 类型类型 数组大小数组大小;(2)为每个数组元素分配空间(为每个数组元素分配空间(参数表用于指定数组元素初值参数表用于指定数组元素初值)数组名数组名0=new 类型类型(参数表参数表);数组名数组名数组大小数组大小-1=new 类型类型(参数表参数表);创建引用数组创建引用数组以下代码段创建以下代码段创建 10 次引用

8、类型次引用类型 Point(假设该类有两个属性:假设该类有两个属性:x和和y,有构造器,有构造器)的数组:的数组:public Point createArray()Point p;p=new Point10;for(int i=0;i10;i+)pi=new Point(i,i+1);return p;创建具有创建具有 Point 对象对象的原始字符的数组:的原始字符的数组:多维数组多维数组五、多维数组五、多维数组(多维数组是一个数组的数组多维数组是一个数组的数组)声明二维数组的一般形式为:声明二维数组的一般形式为:类型类型 数组名数组名 ;或或 类型类型 数组名数组名;或或 类型类型 数组

9、名数组名;类型,可以是简单类型,也可以是引用类型。类型,可以是简单类型,也可以是引用类型。(1)二维数组的初始化二维数组的初始化二维数组的初始化也是在声明数组的同时就为数组元素指定初值。二维数组的初始化也是在声明数组的同时就为数组元素指定初值。例如:例如:int ia2 =1,2,3,4,5,6,7;Java系统将根据初始化时给出的初始值的个数自动计算出数组每一系统将根据初始化时给出的初始值的个数自动计算出数组每一维的大小。在这个例子中维的大小。在这个例子中,二维数组二维数组ia2由三个一维数组组成,这三由三个一维数组组成,这三个一维数组的元素个数分别为个一维数组的元素个数分别为2、2、3。在

10、在Java语言中,语言中,由于把二维数组看作是数组的数组,数组空间不一由于把二维数组看作是数组的数组,数组空间不一定连续分配,所以不要求二维数组每一维的大小相同定连续分配,所以不要求二维数组每一维的大小相同。(2)使用使用new运算符运算符例如:例如:int twoDim=new int 4;twoDim0=new int 5;twoDim1=new int5;第一次调用第一次调用 new 创建一个对象,即包含四创建一个对象,即包含四个元素的数组。每个元素是对个元素的数组。每个元素是对 int 的类型数的类型数组元素的空引用。组元素的空引用。每个元素必须分别被初始化,使每个元素指每个元素必须分

11、别被初始化,使每个元素指向其数组。向其数组。多维数组的引用,类似一维数组。多维数组的引用,类似一维数组。所有数组下标从所有数组下标从 0 开始,元素个数减开始,元素个数减1截止。截止。增强的循环增强的循环六、六、foreach语句语句Java 2 平台标准版本平台标准版本(J2SE)版本版本 5.0 已引入对数组迭代的增强的已引入对数组迭代的增强的 for 循环:循环:public void printElements(int list)for(int element:list)System.out.println(element);for 循环可像列表中的每个元素一样被读取。循环可像列表中的

12、每个元素一样被读取。foreach并不是一个关键字,习惯上将这种特殊的并不是一个关键字,习惯上将这种特殊的for语句格式称之为语句格式称之为“foreach”语句。也即语句。也即“for 每一个每一个”的意思。的意思。foreach的语句格式:的语句格式:for(元素类型元素类型t 元素变量元素变量x:遍历对象遍历对象obj)引用了引用了x的的java语句语句;不能对数组重新调整大小。不能对数组重新调整大小。可使用相同的引用变量来引用整个新的数组,如:可使用相同的引用变量来引用整个新的数组,如:int myArray=new int6;myArray=new int10;但是要尽量防止该情况的

13、出现,因为,但是要尽量防止该情况的出现,因为,第一个数组有效地丢失,第一个数组有效地丢失,除非对其的另一个引用在别处得以保留。除非对其的另一个引用在别处得以保留。5.2 数组作为方法参数和返回值 在在Java语言中,语言中,数组数组可用可用为为方法方法参数和参数和方法方法的的返回值返回值。因为数组是引用类型,数组变量存储的是数因为数组是引用类型,数组变量存储的是数组存储区的引用,所以,组存储区的引用,所以,传送数组或返回数传送数组或返回数组实际上在传送引用组实际上在传送引用。在这个意义上来说,即使实际参数和形式参在这个意义上来说,即使实际参数和形式参数数组数数组变量名不同变量名不同,但但因为它

14、们是因为它们是相同的引相同的引用用,若在被调方法中,改变了形参数组,则,若在被调方法中,改变了形参数组,则该形参对应的实参数组也将发生变化。该形参对应的实参数组也将发生变化。1、数组作为方法参数、数组作为方法参数class ArrayArgument public static void main(String args)int x=11,12,13,14,15;display(x);change(x);display(x);public static void change(int x)for(int i=0;i x.length;i+)xi=xi+10;public static void

15、 display(int x)for(int s:x)System.out.print(s+);System.out.println();程序运行结果如下:11 12 13 14 1521 22 23 24 25 2、可变参数、可变参数 若在程序中,需要将调用方法中一组个数不定的数据单若在程序中,需要将调用方法中一组个数不定的数据单向传送给被调方法,可采用向传送给被调方法,可采用Java语言提供的语言提供的可变参数个数可变参数个数的的方法调用格式定义方法,并用更直观自然的方式在调用方法方法调用格式定义方法,并用更直观自然的方式在调用方法中进行数据传送。可变参数个数的方法参数定义格式可见下中进行

16、数据传送。可变参数个数的方法参数定义格式可见下面的例子。面的例子。例:对一组数据进行求和计算。例:对一组数据进行求和计算。class VarPara public static void main(String args)add(10,20,30,40,50,60,70,80,90);/参数个数可变参数个数可变 static void add(int.s)/参数个数可变参数个数可变的方法的方法 int sum=0;for(int i:s)sum+=i;System.out.print(sum+);运行结果为:450需注意的是:若方法的参数既需注意的是:若方法的参数既有固定部分和又有参数个数可有

17、固定部分和又有参数个数可变部分,则参数个数的可变部变部分,则参数个数的可变部分应置于参数表的分应置于参数表的最后最后。/若改为add(10,20,30,40,50)结果如何?程序运行结果如下:b0=10.0b1=-9.8b2=1.1749999999999998 3、函数返回数组、函数返回数组 编写一个方法,求一组数的最大值、最小值和平均值。编写一个方法,求一组数的最大值、最小值和平均值。该方法要将求出的最大值、最小值和平均值多个值作为结果返回,该方法要将求出的最大值、最小值和平均值多个值作为结果返回,可将它们存储到一个数组中,再用可将它们存储到一个数组中,再用return返回。返回。clas

18、s ReturnArray public static void main(String args)double a=1.1,3.4,-9.8,10;double b=max_min_ave(a);for(int i=0;i b.length;i+)System.out.println(b+i+=+bi);static double max_min_ave(double a)double res=new double3;double max=a0,min=a0,sum=a0;for(int i=1;i a.length;i+)if(max ai)min=ai;sum+=ai;res0=max;

19、res1=min;res2=sum/a.length;return res;5.3 数组操作的常用方法 在在Java语言中,提供了一些对数组进行操作的类和方法,掌握语言中,提供了一些对数组进行操作的类和方法,掌握它们的用法,可方便数组程序的设计。它们的用法,可方便数组程序的设计。1、System类的静态方法类的静态方法arraycopy()系统类系统类System的静态方法的静态方法arraycopy()可用来进行数组复制。其可用来进行数组复制。其格式和功能如下:格式和功能如下:public static void arraycopy(Object src,int src_position,O

20、bject dst,int dst_position,int length)从源数组从源数组src的的src_position处,复制到目标数组处,复制到目标数组dst的的dst_position处,复制长度为处,复制长度为length。例如:例如:int myarray=1,2,3,4,5,6;/original arrayint hold=10,9,8,7,6,5,4,3,2,1;/new larger arraySystem.arraycopy(myarray,0,hold,0,myarray.length);数组包含的内容为:数组包含的内容为:1,2,3,4,5,6,4,3,2,1。S

21、ystem.arraycopy()方法处理对象数组时方法处理对象数组时复制引用复制引用,而非对象。,而非对象。2、Arrays类中的方法类中的方法 java.util.Arrays类中提供了对数组排序类中提供了对数组排序sort、二分查找二分查找binarySearch等等静态方法静态方法。(1)void sort(Object a)sort()方法方法有重载有重载,以适应对不同类型数组,以适应对不同类型数组a的的升序升序排序。排序。注:注:Java 未提供降序方法未提供降序方法,需自己实现。,需自己实现。例:使用例:使用sort方法对一整型数组递增排序。方法对一整型数组递增排序。import

22、 java.util.*;public class ArraySort public static void main(String args)int a=8,6,7,3,5,4,i;Arrays.sort(a);for(int s:a)System.out.print(+s);System.out.println();程序运行结果为:程序运行结果为:3 4 5 6 7 8(2)int binarySearch(Object a,Object key)binarySearch()方法方法有重载有重载,以适应对不同类型已排序数组,以适应对不同类型已排序数组a的二分的二分key查找。查找。对于上述

23、形式的方法:若找到,则对于上述形式的方法:若找到,则返回找到元素的位置返回找到元素的位置;若;若没有找到,则返回一个负值:没有找到,则返回一个负值:-(key应该插入的对应位置)应该插入的对应位置)-1。例:例:binarySearch()方法的使用。方法的使用。import java.util.*;public class BinarySearch public static void main(String args)int a=3,4,5,6,7,8,i;i=Arrays.binarySearch(a,6);System.out.println(i);程序的运行结果为:程序的运行结果为:3异类集合:异类集合:具有相同类的类型的对象集合称之为同类集合。例如:具有相同类的类型的对象集合称之为同类集合。例如:MyDate dates=new MyDate2;dates0=new MyDate(22,12,1964);dates1=new MyDate(22,7,1964);具有不同类的类型的对象集合称之为异类集合。例如:具有不同类的类型的对象集合称之为异类集合。例如:Employee staff=new Employee1024;staff0=new Manager();staff1=new Employee();staff2=new Engineer();5.4 异类集合

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!