版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3.1数组概述数组是一组具有相同类型或者类型相兼容数据的集合,是一种引用数据类型,方便数据的管理和使用。几乎所有的编程语言中都支持数组的操作,在Java语言中数组的使用非常灵活,按照所支持数据的维度不同可以分为:一维数组和多维数组,按照每一维数据的个数是否相同可以分为:规则数组和非规则数组(锯齿数组)。在数组中有5个重要概念,分别是:1.数组的名称(name):又称为数组名,用来代表一个数组。2.数组中的元素(element):数组中每一个数据,是有顺序的。3.数组的类型(type):数组中每个数据的类型,通常是相同的类型。4.数组的索引(index):访问数组中元素的序号,序号的索引位置从0开始。5.数组的长度(length):数组中的元素个数,通过数组名.length获取。3.2一维数组3.2.1一维数组的声明一维数组声明格式如下:数组的类型[]数组名;或者数组的类型数组名[];例如:声明一个整型一维数组a如下:int[]a;或者inta[];注意:以上两种声明方式没有任何区别。一般推荐使用第一种方式来声明数组。在声明数组时,不能指定数组的长度(即数组中元素的个数),下面的写法是错误的:例如:int[3]a;或者inta[3];都是错误的3.2.2一维数组的创建根据数组内存空间分配的不同方式,可以分为静态创建方式和动态创建方式两种。1.一维数组静态创建方式
数组名={元素1,元素2...元素n};也可以在声明数组的同时,创建数组。如下所示:
数组的类型[]数组名={元素1,元素2...元素n};
数组的类型数组名[]={元素1,元素2...元素n};例如:
int[]a;
a=[10,20,30];或者
int[]a=[10,20,30];2.一维数组动态创建方式
数组名=new数组的类型[数组的长度];也可以在声明数组的同时,创建数组。如下所示:
数组的类型[]数组名=new数组的类型[数组的长度];
数组的类型数组名[]=new数组的类型[数组的长度];例如:
int[]a;
a=newint[3];或者
inta=newint[3];注意:new为内存分配符,会动态的为数组开辟存储空间。存储空间的大小为:存储数据的类型*数组的长度。3.2.3一维数组的使用1.一维数组的使用一维数组元素的访问格式如下:
数组名[索引]索引是非负的整型常数或表达式,数组的索引从0开始,直到数组的长度减1为止。如果索引小于0或者大于数组的长度减1时,则会出现运行时数组索引越界异常ArrayIndexOutOfBoundsException。该索引也被称为元素在数组中的偏移位置。【例3-1】一维数组的创建和使用。01packagejavaoo;02publicclassDemo3_1{03 publicstaticvoidmain(String[]args){04 int[]a={10,20,30};05 System.out.println(a[1]);//2006 int[]b=newint[3];07 b[0]=8;08 System.out.println(b[0]);//809 System.out.println(b[1]);//010 System.out.println(b[5]);//ArrayIndexOutOfBoundsException11 }12}动态方式创建数组时,系统会默认给数组的所有元素按照数组的类型赋初值。数据类型默认值备注byte0
short0
char‘\u0000’
int0
long0实际为0Lfloat0.0实际为0.0Fdouble0.0实际为0.0Dbooleanfalse
引用类型null2.一维数组的遍历所谓一维数组的遍历,就是对一维数组中的所有元素,按照相同的规律进行获取,常采用for循环方式。用“数组名.length”表示一维数组的长度。【例3-2】一维数组的遍历。01packagejavaoo;02publicclassDemo3_2{03 publicstaticvoidmain(String[]args){04 int[]a={10,20,30};05 //普通for循环的写法06 for(inti=0;i<a.length;i++){07 System.out.print(a[i]+"");08 }09 System.out.println();10 //增强for循环的写法11 for(inti:a){12 System.out.print(i+"");13 }14 }15}增强的for循环格式如下:for(类型变量:集合类型){循环体语句;}说明:集合类型可以是数组,或者其他集合类型(如ArrayList等)。变量前的类型要和集合中元素的类型一致。增强的for循环会自动从集合中按顺序一次取一个的方式把元素赋值给变量,并且能够自动判断循环的结束条件是否满足。3.2.4一维数组的内存分配1.JVM的内部体系结构Java程序都是运行在JVM之上的,JVM为了运行一个程序,就需要在内存中存储许多内容,如:字节码文件,传递给方法的参数(局部变量),返回值,创建的各种对象(后面会详细讲)以及运算的中间结果等。JVM把这些内容都组织到“运行时数据区”中统一管理。方法区:当JVM装载一个class文件时,会从该文件中解析类型信息,并把class文件以及类型信息放在方法区中,该区中存储class字节码文件、常量、类变量、方法等。栈:是一种数据结构,其特点是“先进后出”或者“后进先出”。如:游戏手枪中的弹夹一样,最后压入弹夹的子弹会第一个发射出去,而第一颗压入的子弹,会最后一个发射出去。这里说的栈特指方法栈,当运行一个方法时,JVM就会开辟一个方法栈空间,用来存储该方法中定义的局部变量的值。堆:相对栈来说,空间较大,主要用来存储引用类型数据的值,如:数组或对象等。PC寄存器:相当于一个程序计数器,是在多线程启动时创建的。【例3-1】一维数组的创建和使用。01packagejavaoo;02publicclassDemo3_1{03 publicstaticvoidmain(String[]args){04 int[]a={10,20,30};05 System.out.println(a[1]);//2006 int[]b=newint[3];07 b[0]=8;08 System.out.println(b[0]);//809 System.out.println(b[1]);//010 System.out.println(b[5]);//ArrayIndexOutOfBoundsException11 }12}2.数组的拷贝数组的拷贝按照分配内存空间的不同,可以分次浅拷贝和深拷贝。①浅拷贝。多个数组名共用同一个块堆内存中的空间。【例3-3】一维数组的浅拷贝。01packagejavaoo;02publicclassDemo3_3{03 publicstaticvoidmain(String[]args){04 int[]a={10,20,30};05 int[]b=a;06 a[0]=88;07 System.out.println(b[0]);//8808 }09}②深拷贝。每个数组在堆内存中有不同的空间,深拷贝的方式有很多种,这里只使用System.arraycopy的方式,具体方式如下:System.arraycopy(dataType[]srcArray,intsrcIndex,intdestArray,intdestIndex,intlength)说明:srcArray表示原数组,srcIndex表示原数组中的起始索引,destArray表示目标数组,destIndex表示目标数组中的起始索引,length表示要复制的数组长度。使用此方法复制数组时,length+srcIndex必须小于等于srcArray.length,同时length+destIndex必须小于等于destArray.length。【例3-4】一维数组的深拷贝。01packagejavaoo;02publicclassDemo3_4{03 publicstaticvoidmain(String[]args){04 int[]a={10,20,30};05 int[]b=newint[3];06 System.arraycopy(a,0,b,0,a.length);07 a[0]=88;08 System.out.println(b[0]);09 }10}3.3多维数组二维及以上维数组被称为多维数组。因为在平常使用过程中,用的最多的就是二维数组,偶尔会用三维数组,所以多维数组里以二维数组进行讲解,其他多维数组的操作和二维数组类似。3.3.1多维数组的声明二维数组的声明格式如下:
数组的类型[][]数组名;
或者数组的类型数组名[][];
或者数组的类型[]数组名[];例如:声明一个整型二维数组a如下:
int[][]a;
或者inta[][];
或者int[]a[];3.3.2多维数组的创建多维数组的创建也可以分为静态创建方式和动态创建方式两种。1.二维数组静态创建方式
数组名={{元素1},{元素2}...{元素n}};这里的元素1,元素2,元素n都是一维数组。也可以在声明数组的同时,创建数组。如下所示:
数组的类型[][]数组名={{元素1},{元素2}...{元素n}};
数组的类型数组名[][]={{元素1},{元素2}...{元素n}};
数组的类型[]数组名[]={{元素1},{元素2}...{元素n}}; 例如:int[][]a;
a=[[1,2,3],[10,20,30]];
或者int[][]a=[[1,2,3],[10,20,30]];2.二维数组动态创建方式
数组名=new数组的类型[一维长度][二维长度];也可以在声明数组的同时,创建数组。如下所示:
数组的类型[][]数组名=new数组的类型[一维长度][二维长度];
数组的类型数组名[][]=new数组的类型[一维长度][二维长度];
数组的类型[]数组名[]=new数组的类型[一维长度][二维长度];例如:
int[][]a;
a=newint[2][3];
或者inta=newint[2][3];注意:该二维数组在内存中存储空间的大小为:存储数据的类型*一维长度*二维长度。3.3.3多维数组的使用1.二维数组的使用二维数组中元素访问格式如下: 数组名[索引1][索引2];索引1和索引2都是非负的整型常数或表达式,索引从0开始,直到所对应维度的长度减1为止。如果索引小于0或者大于所对应维度的长度减1时,则会出现运行时数组索引越界异常ArrayIndexOutOfBoundsException。【例3-5】二维数组的创建和使用。01packagejavaoo;02publicclassDemo3_5{03 publicstaticvoidmain(String[]args){04 int[][]a={{1,2,3},{10,20,30}};05 System.out.println(a[1][2]);//3006 int[][]b=newint[2][3];07 b[0][0]=8;08 System.out.println(b[0][0]);//809 System.out.println(b[1][2]);//010 System.out.println(b[0][5]);//ArrayIndexOutOfBoundsException11 }12}2.二维数组的遍历所谓二维数组的遍历,就是对二维数组中的所有元素,按照相同的规律进行获取,常采用for循环方式。需要注意以下两个区别:数组名.length表示二维数组中的元素个数。数组名[索引].length表示二维数组中索引所对应的一维数组的长度。【例3-6】二维数组的遍历。见教材。3.3.4多维数组的内存分配【例3-5】二维数组的创建和使用。01packagejavaoo;02publicclassDemo3_5{03 publicstaticvoidmain(String[]args){04 int[][]a={{1,2,3},{10,20,30}};05 System.out.println(a[1][2]);//3006 int[][]b=newint[2][3];07 b[0][0]=8;08 System.out.println(b[0][0]);//809 System.out.println(b[1][2]);//010
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第21章 恶性肿瘤流行病学课件
- Unit 4 Section A(1a-1d)(同步课件)-2024-2025学年初中英语七年级上册同步课件(人教版2024)
- 2024年住宅用地买卖协议范本
- 2024年重型设备吊装及配送协议样本
- 2024年适用借款协议文本范例
- 2024年建筑行业人工服务协议
- 2024年高级建筑自动化工程承包协议
- 2024年西安市出租车租赁运营协议
- 2024年房产急售授权销售协议范例
- 二手房交易范本:上海2024年协议
- 《中华商业文化》第四章
- 服务与服务意识培训课件
- 第5课《秋天的怀念》群文教学设计 统编版语文七年级上册
- 二年级家长会语文老师课件
- 冬季安全生产特点及预防措施
- 视频短片制作合同范本
- 结构加固改造之整体结构加固教学课件
- 高中数学-3.3 幂函数教学课件设计
- 抑郁症与睡眠障碍课件
- 创新思维与创业实验-东南大学中国大学mooc课后章节答案期末考试题库2023年
- 第九讲 全面依法治国PPT习概论2023优化版教学课件
评论
0/150
提交评论