数组定义相同类型的有序集合声明创建数组元素通过索引访问从0开始publicclassArrayDemo01{//变量类型 变量名字 变量的值//数组类型publicstaticvoidmain(String[]args){//1.声明一个数组int[]nums;//首选intnums2[];//效果相同//2.创建一个数组numsnewint[10];//这里面可以存放10个int类型的数字//前两步可以合并成 int[] numsnew int[10];//3.给数组元素中赋值nums[0]1;nums[1]2;nums[2]3;nums[3]4;nums[4]5;nums[5]6;nums[6]7;nums[7]8;nums[8]9;nums[9]10;//如果不赋值默认是0System.out.println(nums[0]);//1System.out.println(nums[1]);//2//System.out.println(nums[10]);//java.lang.ArrayIndexOutOfBoundsException: 10 数组下标越界//计算所有元素的和intsum0;//获取数组长度arrays.lengthfor(inti0;inums.length;i){sumsumnums[i];}System.out.println(sum);}}内存分析堆 存放new的对象和数组可以被所有线程共享栈 存放基本变量类型引用对象的变量方法区 可以被所有线程共享包含所有的class和static变量三种初始化静态初始化动态初始化默认初始化数组也是应用类型他的元素相当于类的实例变量因此数组一经分配空间其中的每个元素也被按照实例变量同样的方式被隐式初始化publicclassArrayDemo02{publicstaticvoidmain(String[]args){//静态初始化:创建 赋值int[]a{1,2,3,4,5,6,7,8};System.out.println(a[0]);//1//动态初始化:包含默认初始化int[]bnewint[10];b[0]10;System.out.println(b[0]);//10System.out.println(b[1]);//0System.out.println(b[2]);//0}}数组的四个基本特点长度确定一旦被创建大小不可改变元素必须是相同类型不能出现混合类型数组中的元素可以是任何数据类型包括基本类型和引用类型数组变量属于应用类型数组也可以被看成是对象数组中的每个元素相当于该对象的成员变量。数组本身就是对象Java中对象是在堆中的因此数组无论保存原始类型还是其他对象类型数组对象本身是在堆中的数组边界下标的合法区间[0length-1]越界就会报错//ArrayIndexOutOfBoundsException数组下标越界异常数组的使用普通for循环For-Each循环​ 数组作方法入参 //打印数组元素​ 数组作返回值 //反转数组普通for循环publicclassArrayDemo03{publicstaticvoidmain(String[]args){int[]arrays{1,2,3,4,5};//打印全部的数组元素for(inti0;iarrays.length;i){System.out.println(arrays[i]);}System.out.println(——————————————————);//计算所有元素的和intsum0;for(inti0;iarrays.length;i){sumsumarrays[i];}System.out.println(sumsum);//sum15System.out.println(——————————————————);//查找最大元素intmaxarrays[0];for(inti1;iarrays.length;i){if(maxarrays[i]){maxarrays[i];}}System.out.println(maxmax);//max5}}For-Each循环publicclassArrayDemo04{publicstaticvoidmain(String[]args){int[]arrays{1,2,3,4,5};// //JDK1.5,没有下标// for (int array : arrays) {// System.out.println(array);// }// }printArray(arrays);//1 2 3 4 5System.out.println();int[]reversereverse(arrays);printArray(reverse);//5 4 3 2 1}//打印数组元素publicstaticvoidprintArray(int[]arrays){for(inti0;iarrays.length;i){System.out.print(arrays[i] );}}//反转数组publicstaticint[]reverse(int[]arrays){int[]resultnewint[arrays.length];//反转的操作for(inti0,jresult.length-1;iarrays.length;i,j--){result[j]arrays[i];}returnresult;}}多维数组多维数组可以看成是数组的数组比如二维数组就是一个特殊的一维数组其每一个元素都是一个一维数组二维数组inta[][]newint[2][4];publicclassArrayDemo05{publicstaticvoidmain(String[]args){//[2][4]/* 1,2,3,4 array[0] 5,6,7,8 array[1] */int[][]array{{1,2,3,4},{5,6,7,8}};System.out.println(array[0]);//[I1ee0005System.out.println(array[0][0]);//1System.out.println(array[0][1]);//2printArray(array[0]);//1 2 3 4System.out.println();System.out.println(array.length);//2System.out.println(array[0].length);//4for(inti0;iarray.length;i){for(intj0;jarray[i].length;j){System.out.print(array[i][j] );//1 2 3 4 5 6 7 8}}}//打印数组元素publicstaticvoidprintArray(int[]arrays){for(inti0;iarrays.length;i){System.out.print(arrays[i] );}}}扩展Arrays 类数组的工具类java.util.Arraysimportjava.util.Arrays;importjava.util.Scanner;publicclassArrayDemo06{publicstaticvoidmain(String[]args){int[]a{1,2,3,4,34,214,4567,3};System.out.println(a);//[I1ee0005//打印数组元素System.out.println(Arrays.toString(a));//[1, 2, 3, 4, 34, 214, 4567, 3]printArray(a);//[1, 2, 3, 4, 34, 214, 4567, 3]Arrays.sort(a);//对数组进行排序System.out.println(Arrays.toString(a));//[1, 2, 3, 3, 4, 34, 214, 4567]Arrays.fill(a,2,6,5);//数组填充[2,6)System.out.println(Arrays.toString(a));//[1, 2, 5, 5, 5, 5, 214, 4567]}publicstaticvoidprintArray(int[]a){for(inti0;ia.length;i){if(i0){System.out.print([);}if(ia.length-1){System.out.println(a[i]]);}else{System.out.print(a[i], );}}}}冒泡排序最出名的排序算法之一总共有八大排序时间复杂度O(n2)importjava.util.Arrays;publicclassArrayDemo07{publicstaticvoidmain(String[]args){//冒泡排序//1.比较数组中两个相邻的元素如果第一个数比第二个数大我们就交换他们的位置//2每一次比较都会产生一个最大或最小的数字//3.下一轮则可以少一次排序//4.依次循环直到结束int[]a{1,2,2,3,4,5,65,8,24,555};int[]sortsort(a);//调用完我们自己写的排序方法以后返回一个排序后的数组System.out.println(Arrays.toString(sort));//[1, 2, 2, 3, 4, 5, 8, 24, 65, 555]}publicstaticint[]sort(int[]array){//临时变量inttemp0;//外层循环:判断我们这个要走多少次for(inti0;iarray.length-1;i){Booleanflagfalse;//通过flag标识位减少没有意义的比较//内层循环:比较判断两个数如果第一个数比第二个数大则交换位置//交换位置必须使用中间变量for(intj0;jarray.length-1-i;j){if(array[j1]array[j]){//从小到大从大到小temparray[j];array[j]array[j1];array[j1]temp;flagtrue;}}if(flagfalse){break;}}returnarray;}}稀疏数组是一种数据结构当一个数组中大部分元素为0或者为同一值的数组时可以用稀疏数组来保存该数组处理方式记录数组一共有几行几列有多少个不同值把具有不同值的元素和行列及值记录在一个小规模的数组中从而缩小程序的规模publicclassArrayDemo08{publicstaticvoidmain(String[]args){//1.创建一个二维数组 11*11 0没有棋子 1黑棋 2白棋int[][]array1newint[11][11];array1[1][2]1;array1[2][3]2;//输出原始的数组System.out.println(输出原始的数组);for(int[]ints:array1){for(intanInt:ints){System.out.print(anInt\t);}System.out.println();}System.out.println(——————————————————————————————————————————);//转换为稀疏数组保存//获取有效值的个数intsum0;for(inti0;i11;i){for(intj0;j11;j){if(array1[i][j]!0){sum;}}}System.out.println(有效值的个数sum);//2.创建一个稀疏数组的数组int[][]array2newint[sum1][3];array2[0][0]11;array2[0][1]11;array2[0][2]sum;//遍历二维数组将非零的值存放到稀疏数组中intcount0;for(inti0;iarray1.length;i){for(intj0;jarray1[i].length;j){if(array1[i][j]!0){count;array2[count][0]i;array2[count][1]j;array2[count][2]array1[i][j];}}}//输出稀疏数组System.out.println(稀疏数组);for(inti0;iarray2.length;i){System.out.println(array2[i][0]\tarray2[i][1]\tarray2[i][2]\t);}System.out.println(——————————————————————————————————————————);System.out.println(稀疏数组还原);//1.读取稀疏数组int[][]array3newint[array2[0][0]][array2[0][1]];//2.给其中的元素还原它的值for(inti1;iarray2.length;i){array3[array2[i][0]][array2[i][1]]array2[i][2];}//3.打印System.out.println(输出还原的数组);for(int[]ints:array3){for(intanInt:ints){System.out.print(anInt\t);}System.out.println();}}}