3JAVA基础语法数组.docx
- 文档编号:8799384
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:16
- 大小:60.25KB
3JAVA基础语法数组.docx
《3JAVA基础语法数组.docx》由会员分享,可在线阅读,更多相关《3JAVA基础语法数组.docx(16页珍藏版)》请在冰豆网上搜索。
3JAVA基础语法数组
Java基础语法&数组
数组:
其实就是定义一个可以存储多个数据的容器,也称为实体。
实体的定义需要使用一个关键字来完成。
就是new。
要明确这个实体中存储的元素的类型,和元素的个数.
1、数组的定义形式:
元素类型[]数组名=new元素类型[元素个数或数组长度];
元素类型[]数组名={1,2,3,4,5,6,7};可以直接指定具体的数据
元素类型[]数组名;
数组名=new元素类型[元素个数或数组长度];
2、数组的特点:
1)数组定义时,必须明确数组的长度(就是数组中可以存储的元素的个数。
)因为数组长度是固定的。
2)数组定义时,必须明确数组中的元素的数据类型。
案例1:
int[]arr=newint[3];
arr[0]=89;
System.out.println(arr[2]);
3、java内存区域的划分:
1)寄存器。
2)本地方法区。
3)方法区。
4)栈内存。
5)堆内存。
为什么划分这么区域?
因为每一个内存区域对数据的处理方式不同。
目前要讲的就是栈和堆。
4、栈内存的特点:
存储都是局部变量(函数参数,函数内定义的变量,语句中定义的变量)。
变量一旦使用完(作用域结束),就会在栈内存中自动释放。
堆:
存储的是实体(数组和对象,只要是new的,都在堆中)
5、堆内存的特点:
1,堆内存中的实体都有首内存地址值.2,堆内存中的变量都有默认初始化值.3,对于没有任何引用变量指向的实体,会视为垃圾,会被垃圾回收机制所回收。
6、数组常见的问题:
ArrayIndexOutOfBoundsException:
数组的角标越界异常
当访问到了数组中不存在的角标时,就会发生该异常。
NullPointerException空指针异常。
当一个引用型变量没有任何实体指向时,还在使用实体中的内容。
就会发生该异常。
System.out.println(arr);//[I@c17164@前面代表一个一维数组@后面代表一个哈希值
1,数组是什么?
数组:
数组就是具有同一类型的一些数的一个集合。
2,数组有什么特点?
数组的特点:
必须明确数组的长度和数组的类型,以及数组带有角标,方便使用。
3,数组什么时候使用?
当在处理多个同类型的数据时候可以采用数组存储
4,java的内存(栈和堆)的特点?
栈:
存储都是局部变量(函数参数,函数内定义的变量,局部代码块中定义的变量),栈内存的变量没有初始化值。
变量一点使用完(作用域结束),随着函数的加载变量会在内存中开辟属于自己的空间。
一旦函数运行结束,就会在栈内存中自动释放。
先进后出,后进先出。
堆:
存储的是实体(数组和对象,只要是new的都在堆中)。
new关键字一出现都会在堆内存中分配实体空间。
堆内存中的所有变量都会有默认初始化值。
5,画出一个数组的内存分布图。
并用文字描述步骤。
内存分布图:
int[]arr=newint[3];
arr[1]=100;
内存加载说明:
当执行到int[]arr时。
首先在栈内存开辟一个以数组名为名的空间,这个空间的目的是存放一个堆内存中数组的内存地址。
此时这个空间中并没有存放任何值。
当执行到newint[3]时,会在堆内存中首先划分出一块数组内存区域,这个时候就有一个内存地址与之对应,这里假设0x0056。
然后将这个区域分成3个小空间分别代表数组的三个存储空间,他们一旦分配就会自动产生索引角标,同时也会自动初始化值,此时由于数组是int的所有初始化值为0.并将这个堆内存中的数组首地址赋值给栈内存的arr空间。
当赋值后,栈内存的arr数组名就能所引到堆内存中的数组存储区域。
此时整个数组的定义个空间分配结束。
当执行arr[1]=100时,就会将这个以100存放到数组角标为1的空间中,原来初始化的0被覆盖。
需要注意的是,一旦arr不再指向堆内存的数组存储区域时,这个数组同时也没有其他引用变量所有引用,那么堆内存中的这个数组存储区域将变成垃圾,等待JVM的垃圾回收器把它收走。
数组的简单操作、排序、最值、折半查找、查表法、数组内存分布图
1、数组的简单操作:
数组在定义的时候必须明确数组的类型和长度,并明确了数组中元素的内容。
为了方便获取数组中的元素个数的方式,可以使用数组实体一个属性。
length
使用方法为数组名.length
数组最常见的操作就是数组:
遍历。
其实操作数组的最终核心思想:
就是操作角标(索引)。
2、最值:
classArrayTest{
publicstaticvoidmain(String[]args){
int[]arr={3,6,8,1,88,22};
intmax=getMax(arr);
System.out.println("max="+max);
}
/*
定义一个功能完成获取数组中最大值的动作。
定义一个函数来体现。
1,确定结果:
整数数组中的最大值,int。
2,确定未知:
数组是未知的,参数列表中有一个参数,数组类型int[]
具体怎么功能细节如何实现呢?
思路:
1,对数组中的元素进行比较,将比较后比较大的值进行记录,并参与下一次比较。
当数组中的元素都比较完成后,最大值就已经被记录下来了。
2,每次比较的较大的值不确定,定义一个变量进行记录,该变量如何初始化呢?
只要初始化为数组中的任意一个元素即可。
3,应该让数组中的元素自动和该变量记录的元素进行比较。
所以可以使用遍历,获取出数组中的每一个元素。
4,当遍历到的元素比较变量中的记录的元素大,用该变量记录住更大的元素。
5,遍历结束后,变量中存储的就是数组中的最大值。
*/
publicstaticintgetMax(int[]arr){
//定义变量记录较大的值。
intmax=arr[0];//初始化为数组中的任意一个元素。
for(intx=1;x if(arr[x]>max) max=arr[x]; } returnmax; } //继续获取数组最大值。 publicstaticintgetMax2(int[]arr){ intmaxIndex=0;//初始化为数组中的一个角标。 for(intx=1;x if(arr[x]>arr[maxIndex]) maxIndex=x; } returnarr[maxIndex]; } } 数组的各种操作: classArraySort{ publicstaticvoidmain(String[]args){ int[]arr=newint[]{3,5,7,8,9,5,3,1,3,4,67,7,8,12,8,98,9}; printArray(arr); //intmax=getMax(arr); //System.out.println("max="+max); //intmin=getMin(arr); //System.out.println("min="+min); //selectSortMaxToMin(arr); //printArray(arr); //niZhuan(arr); //printArray(arr); //intindex=halfSearch2(arr,98); //System.out.println("index="+index); bubbleSort(arr); printArray(arr); } /* getMax函数用于获取int数组的最大值,需要指明具体哪一个int数组 */ publicstaticintgetMax(int[]arr) { intmax=arr[0]; for(inti=0;i { if(arr[i]>max) { max=arr[i]; } } returnmax; } /* getMin函数用于获取int数组的最小值,需要指明具体哪一个int数组 */ publicstaticintgetMin(int[]arr) { intmin=arr[0]; for(inti=0;i { if(arr[i] { min=arr[i]; } } returnmin; } /* selectSortMaxToMin函数用于int数组的从大到小排序,需要指明具体哪一个int数组 */ publicstaticvoidselectSortMaxToMin(int[]arr) { for(inti=0;i { for(intj=i+1;j if(arr[i] { swap(arr,i,j); } } } /* selectSortMinToMax函数用于int数组的从小到大排序,需要指明具体哪一个int数组 */ publicstaticvoidselectSortMinToMax(int[]arr) { for(inti=0;i { for(intj=i+1;j if(arr[i]>arr[j]) { swap(arr,i,j); } } } /* printArray函数用于int数组的打印,需要指明具体哪一个int数组 */ publicstaticvoidprintArray(int[]arr) { for(inti=0;i { if(i System.out.print(arr[i]+","); else System.out.println(arr[i]+"\n"); } } /* halfSearch函数采用折半法(二分法)从int数组中查找一个指定的数在此数组中的角标位置,使用之前必须保证提供的数组已经是有序的数组,需要指明具体哪一个int数组 */ publicstaticinthalfSearch(int[]arr,intkey) { intmin,max,mid,index; min=0; max=arr.length-1; mid=(min+max)/2; while(min<=max) { if(key>arr[mid]) min=mid+1; elseif(key max=mid-1; elsereturnmid; mid=(min+max)/2; } return-1; } publicstaticinthalfSearch2(int[]arr,intkey) { intmin,max,mid,index; min=0; max=arr.length-1; mid=(min+max)/2; while(arr[mid]! =key) { if(key>arr[mid]) min=mid+1; elseif(key max=mid-1; elsereturn-1; mid=(min+max)/2; } returnmid; } /* swap函数用于交换数组中的两个数值,必须明确具体着两个数的角标 */ publicstaticvoidswap(int[]arr,inti,intj) { inttemp=arr[i]; arr[i]=arr[j]; arr[j]=temp;; } /* niZhuan函数用于把一个数组反转 */ publicstaticvoidniZhuan(int[]arr) { for(inti=0,j=arr.length-1;i { swap(arr,i,j); } } /* bubbleSort函数功能是用冒泡发对数组进行排序 */ publicstaticvoidbubbleSort(int[]arr) { for(inti=0;i { for(intj=0;j { if(arr[j]>arr[j+1]) { swap(arr,j,j+1); } } } } } 查表法完成进制转换: classArrayTest { publicstaticvoidmain(String[]args) { toBin(-6); System.out.println(Integer.toBinaryString(-6)); toHex(26); toOctal(48); } //十进制--二进制 publicstaticvoidtoBin(intnum) { trans(num,1,1); } //十进制--八进制 publicstaticvoidtoOctal(intnum) { trans(num,7,3); } //十进制--十六进制 publicstaticvoidtoHex(intnum) { trans(num,15,4); } publicstaticvoidtrans(intnum,intbase,intoffset) { if(num==0) { System.out.println(0); return; } //定义一个十六进制的元素的表。 char[]arr={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; //定义一个char类型元素的数组,用于存储每次获取到的十六进制值。 char[]chs=newchar[32]; intpos=chs.length; while(num! =0) { inttemp=num&base; chs[--pos]=arr[temp]; num=num>>>offset; } //System.out.println("pos="+pos); //打印数组内容。 for(intx=pos;x { System.out.print(chs[x]); } System.out.println(); } } 二维数组: 常见的二维数组的定义形式: 1、int[][]arr=newint[3][3]; 2、int[][]arr=newint[3][];//定义一个二维数组,明确了二维数组的长度,但是二维中的每一个一位数组没有明确 arr[0]=newint[3]; arr[1]=newint[2]; arr[2]=newint[5]; 3、int[]arr[]=newint[3][3]; 4、intarr[][]=newint[3][3]; 5、int[][]arr={{1,3,5,6},{6,3,2},{1,2}}; 什么时候使用二维数组: 当数组多了就可以采用二维数组来继续存储。 中括号随着类型定义对所有变量都起作用,如果中括号在变量后面只对当前的变量起作用。 classArray2Demo { publicstaticvoidmain(String[]args) { //int[]arr=newint[3]; //数组中的数组: 数组中的元素还是数组。 //int[][]arr=newint[2][3]; //System.out.println(arr[0][1]);//0 //System.out.println(arr[0]);//[I@c17164 //System.out.println(arr);//[[I@c17164 int[][]arr=newint[][];//定义一个二维数组,明确了二维数组的长度, //但是二维中每一个一维数组并没有明确。 //对二位数组中的每一个一维数组进行初始化。 arr[0]=newint[3]; arr[1]=newint[1]; arr[2]=newint[2]; System.out.println(arr);//[[I@c17164 System.out.println(arr[0]);//null classArray2Demo2 { publicstaticvoidmain(String[]args) { //int[][]arr={{3,7,18,5},{3,6,4,8,9},{15,89}}; int[][]arr={{4,6,2,8},{1,9,3,2},{6,8,4,8}}; //System.out.println(arr.length);//3 //System.out.println(arr[1].length); //遍历二维数组中的所有元素。 大圈套小圈 for(intx=0;x { intsum=0; for(inty=0;y { //System.out.println(arr[x][y]); sum+=arr[x][y]; } System.out.println("sum="+sum); } String[]arr1=getMonth("夏季"); for(intx=0;x { System.out.println(arr1[x]+","); } } publicstaticString[]getMonth(Stringstr) { String[]season={"春季","夏季","秋季","冬季"}; intindex=searchIndex(season,str); String[][]month={{"三月","四月","五月"},{"六月","七月","八月"}}; returnmonth[index]; } publicstaticintsearchIndex(String[]arr,Stringkey) { for(intx=0;x { if(arr[x].equals(key)) returnx; } return-1; } } 1,数组的操作基本思想? 数组: 数组就是一个容器,用来装元素,需要明确数组的类型和数组的长度。 数组就是把很多个变量放在一起的一个集合。 2,数组的常见的操作动作以及理解过程。 最值,排序,折半. 数组的基本思想: 数组最常用的操作动作: 存值和获取值,比如获取: 最值 排序,折半查找。 3,数组容器的应用场景? 什么时候使用容器: 一旦数据多,个数能确定就采用数组来存储。 4,必须掌握查表法,将查表法的思想写出来,并明确什么时候使用查表法。 表: 是个容器,表里面存在一定的对应关系。 查: 用一种对应关系去找另外一种对应关系。 编码表: 是生活中的一些事物对应的二进制数的一个序列。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 基础 语法 数组
![提示](https://static.bdocx.com/images/bang_tan.gif)