您好,欢迎访问三七文档
JAVA编程基础——数组第四章数组目标:介绍关于数组的相关知识。通过本课的学习,学员应该掌握如下知识:1)创建数组及初始化其中数据2)了解数组在内存中的表现形式3)一维数组及多维数组的创建和遍历4)数组的复制和排序及数组异常教学方法:讲授ppt+上机练习本章要点•一维数组一维数组的声明、创建、初始化数组在内存中的表示数组的元素数组的长度数组的常见错误•多维数组二维数组的声明、创建、初始化数组的复制数组的排序Contents一维数组1多维数组2数组的操作3数组的基本概念•数组的概念数组可以看成是多个相同类型数据的组合,实现对这些数据的统一管理数组中的每一个数据—数组的一个元素(element)数组中的元素可以是任何数据类型,包括基本数据类型和引用类型数组中元素的个数,称为数组的长度(length)Java语言中声明数组时不能指定其长度e.g.inta[5];//非法{1,2,3,4,5}{“apple”,“pear”,“banana”,“grape”}数组的声明•一维数组的声明或•示例数组类型数组名[]数组类型[]数组名inta[];int[]b;doubled[];char[]ch;Studentstu[];声明后的内存情况astackheapnull数组的创建•一维数组的创建•示例数组名=new数据元素类型[元素个数]inta[];a=newint[5];inta[]=newint[5];创建后的内存情况astackheap0X12400000•数组是存储多个相同类型变量的对象。数组的所有元素保存在堆内存中。•创建一个数组就是在堆中创建一个数组对象。•数组创建后立即拥有默认值。•索引从0开始。•连续分配int[]array;array=newint[4];00000123Theheap数组对象ValueIndex数组的内存模型数组的初始化•初始化在创建数组的同时就为数组元素分配空间并赋值inta[]={1,2,3,4,5};数组类型数组名[]={元素1,元素2,…}inta[]=newint[]{1,2,3,4,5};数组类型数组名[]=new数据类型[]{元素1,元素2,…}或或数组☻练习说明下列创建数组的方法那些是正确的______。A)intdim[]=newint[4];B)intdim[4]=newint[];C)intdim[]=newint[]{1,2,3,4};D)chara[]={‘A’,‘B’};E)charc[]=“ABC”;答案:A、C、D数组元素的访问•数组元素的访问Java中,数组元素的下标从0开始元素的下标可以是整型常量或整型表达式inta[];a=newint[5];a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;数组名[元素下标]=元素值;数组元素的访问•数组的长度(length)必须=0;•length为只读。•利用length遍历数组int[]array;array=newint[4];数组元素的访问•数组的遍历利用for循环语句和数组下标☻练习循环遍历字符串数组{“red”,”orange”,”yellow”,“green”,“blue”,”purple”},并将其打印Stringcolor[]={red,orange,yellow,green,blue,purple};for(inti=0;icolor.length;i++){System.out.println(color[i]);}数组元素的访问•数组的遍历利用for/each循环语句和数组下标☻练习循环遍历字符串数组{“red”,”orange”,”yellow”,“green”,“blue”,”purple”},并将其打印Stringcolor[]={red,orange,yellow,green,blue,purple};for(Stringc:color){System.out.println(c);}数组的异常•数组中的常见异常//异常一:数组没有创建inta[]=null;a[0]=1;System.out.println(a[0]);//异常二:下标越界inta[]={1,2,3};System.out.println(a[3]);Contents一维数组1多维数组2数组的操作3多维数组•多维数组的概念Java中没有真正的多维数组,只有数组的数组锯齿数组Java中多维数组不一定是规则矩阵形式多维数组的声明•二维数组的声明或数组类型数组名[][]数组类型[][]数组名数组类型[]数组名[]inta[][];int[][]b;int[]c[];多维数组的创建•二维数组的创建或必须声明行的个数数组名=new数据元素类型[行数][列数];数组名=new数据元素类型[行数][];a=newint[3][4];a=newint[3][];a=newint[][4];//非法多维数组的初始化•二维数组的初始化inta[][]={{1,2,3},{4,5},{7}};inta[][]=newint[][]{{1,2,3},{4,5},{7}};数组类型数组名[][]={{元素11,元素12,…},{元素21,元素22,…}}数组类型数组名[][]=new数据类型[][]{{元素11,元素12,…},{元素21,…}}或多维数组的初始化•二维数组的初始化int[][]a=newint[3][];a[0]=newint[2];a[1]=newint[3];a[2]=newint[4];a[0][0]=1;a[0][1]=2;…多维数组的内存表示•二维数组在内存中的表示a[0]a[1]a[2]astackheap0X124inta[][]={{1,2,3},{4,5},{7}};745123a[0]a[1]a[2]多维数组的访问•多维数组的遍历int[][]a={{1,2},{3,4,5,6}};//forfor(inti=0;ia.length;i++){for(intj=0;ja[i].length;j++){System.out.println(a[i][j]);}}//for/eachfor(int[]t:a){for(inte:t){System.out.println(e);}}多维数组的访问☻练习int[][]a=newint[3][4];for(inti=0;ia.length;i++){for(intj=0;ja[i].length;j++){a[i][j]=i+j;}},则a[2][3]=____A.3B.4C.5D.2答案:CContents一维数组1多维数组2数组的操作3数组的复制•数组的复制—System.arraycopy()复制source数组中从下标srcPos开始的length个元素到目标数组dest,并从目标数组的下标为destPos的位置开始储存source:源数组srcPos:源数组中的起始位置dest:目标数组destPos:目标数组中的起始位置length:要复制的数组元素的个数☻练习复制数组{1,2,3,4,5}中从下标0开始的5个元素到目标数组{6,7,8,9,10,11,12,13,14,15},并从目标数组的下标为0的位置开始储存System.arraycopy(source,srcPos,dest,destPos,length)Contents1线性查找2冒泡排序数组的排序•数组的排序—java.util.Arrays.sort()对数组arr_name中,从下标为fromIndex到toIndex的元素(不包括toIndex)进行升序排序•示例:Arrays.sort(arr_name)Arrays.sort(arr_name,fromIndex,toIndex)int[]point={1,6,2,3,9,4,5,7,8};java.util.Arrays.sort(point);for(inti=0;ipoint.length;i++){System.out.println(point[i]);}Contents1线性查找2冒泡排序线性查找线性查找又称为顺序查找,是从数组中的第一个元素开始查找比较,如果找到则返回改值或改值的位置,如果没有找到则往下继续查找,直到找到最后一个元素为止。例如下面的数组要查找“2”的方法如下:步骤1:与数组中第1个元素比较。2≠5,向下寻找步骤2:与数组中第2个元素比较。2≠3,向下寻找步骤3:与数组中第3个元素比较。2≠6,向下寻找步骤4:与数组中第4个元素比较。2=5,找到该数据冒泡排序法排序方法从数组第一个元素开始,将第一个元素a[i]同下一个元素a[i+1]进行比较,如果a[i]大于a[i+1]则将两者相交换。直到比较完最后一个元素。这时数组中最小的元素会被交换成为数组首端。由于该比较法每次可以将最大或者最小的元素以交换的方式移动到数组首或数组为,就像气泡从水底浮向水面一样,到水面时气泡最大,故称该排序法为冒泡排序法。冒泡排序法如数组:int[]a={6,5,8,3,7};该数组中一共有5个数据,所以要比较4趟,第一趟结果如下,其他相似。(1)a[0]VSa[1],因为a[0]a[1],所以交换a[0]和a[1](2)a[1]VSa[2],因为a[1]a[2],所以不能交换a[1]和a[2]。数组不变。(3)a[2]VSa[3],因为a[2]a[3],所以交换a[2]和a[3]。(4)a[3]VSa[4],因为a[3]a[4],所以交换a[3]和a[4]。冒泡排序法//冒泡排序(下沉法)publicstaticvoidbubbleSort(int[]a){for(inti=0;ia.length-1;i++){for(intj=0;ja.length-i-1;j++){if(a[j]a[j+1]){intt=a[j];a[j]=a[j+1];a[j+1]=t;}}}}冒泡排序的优点和缺点•优点:若数据已有部分排好序,则可以很快的完成排序。•缺点:会反复扫描数据,比较相邻的两个数据,速度不快也没有效率。冒泡排序属于稳定性排序法最佳状况:数据的顺序恰与排序后的顺序相同最坏状况:数据的顺序恰与排序后的顺序相反如:12345如:54321冒泡排序的效率•一般来说:数组中有N个数据项则第一次有N-1次比较,第二趟有N-2次依次类推:•(n-1)+(n-2)+(n-3)….+1=n*(*-1)/2;•算法做了约N的2次方/2次比较•交换次数少于比较次数,最坏的情况下每次都需要交换•冒泡排序是所有排序中最慢的一种小结•一维数组理解解数组的元素掌握数组的长度掌握一维数组的声明、创建、初始化理解数组在内存中的表示数组的常见错误•多维数组掌握二维数组的声明、创建、初始化•数组的操作数组的遍历理解数组的复制理解数组的查找与排序
本文标题:java数组
链接地址:https://www.777doc.com/doc-4484172 .html