dateType [] arrayRefVar;//首选的方法 dateType arrayRefVar[];//但是不是首选的方法
dateType [] arrayRefVar = new dateType[arraySize];
arrays.length
数组四个基本特点:
int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man(2,2)};
int[] a = new int[2]; a[0] = 1; a[1] = 2;
代码如下:
package com.maynerd.array; public class ArrayDemo02 { public static void main(String[] args) { //静态初始化:创建+赋值 int[] a = {1,2,3,4,5,6,7,8}; System.out.println(a[0]); //动态初始化:包含默认初始化 int[] b = new int[10]; b[0] = 10; System.out.println(b[0]); System.out.println(b[1]); System.out.println(b[2]); System.out.println(b[3]); System.out.println(b[4]); System.out.println(b[5]); System.out.println(b[6]); System.out.println(b[7]); } }
下标的合法区间:[0,length - 1],如果越界就会报错;
public static void main(String args[]){ int[] a = new int[2]; SYstem.out.println(a[2]); }
ArrayIndexOutOfBoundsException:数组下标越界异常!
数组使用:
package com.maynerd.array; public class ArrayDemo04 { public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; // //JDK 1.5:没有下标 // for (int array : arrays) { // System.out.println(array); // } // printArray(arrays); reverse(arrays); printArray(arrays); } public static void reverse(int[] arrays){//数组作为方法的入参 int temp; for (int i = 0; i < arrays.length / 2; i++) { temp = arrays[i]; arrays[i] = arrays[arrays.length - i - 1]; arrays[arrays.length - i - 1] = temp; } } public static void printArray(int[] arrays){//数组作为方法的入参 for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i] + " "); } } }
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一位数组。
二维数组:
int a[][] = new int[2][5];
解析:可以看成一个两行五列的数组。
思考:多维数组的使用。
直接打印一个数组,代码如下:
package com.maynerd.array; import java.lang.reflect.Array; public class ArrayDemo06 { public static void main(String[] args) { //直接打印数组返回的是一个对象(引用)的hashcode int a[] = {1,2,3,4,5,21434,534,123,2}; System.out.println(a); } }
结果:返回一个hashcode,也就是在内存中的地址。
使用Arrays类打印数组元素,以后可以直接用自带的类,也可以自己写,代码如下:
package com.maynerd.array; import java.lang.reflect.Array; import java.util.Arrays; public class ArrayDemo06 { public static void main(String[] args) { //直接打印数组返回的是一个对象(引用)的hashcode int a[] = {1,2,3,4,5,21434,534,123,2}; // System.out.println(a); //打印数组元素 System.out.println(Arrays.toString(a)); Arrays.sort(a); System.out.println(Arrays.toString(a)); } }
结果如下:
代码如下:
package com.maynerd.array; import java.util.Arrays; public class ArrayDemo07 { public static void main(String[] args){ int[] a = {1,412,5,2,6,2,34,5,13}; sort(a); System.out.println(Arrays.toString(a)); } /* 冒泡排序: 1.比较数组中的两个相邻的元素,如果第一个比第二个大,我们就交换他们的位置; 2.每一次比较,都会产生一个最大行或者最小的数字; 3.下一轮则可以少一次比较; 4.依次循环,直到结束。 */ public static void sort(int[] array){ int temp = 0; for (int i = 0; i < array.length - 1; i++) { boolean flag = false;//通过flag标记减少没有意义的比较 for (int j = 0; j < array.length - 1; j++) { if (array[j + 1] < array[j]){//小的放在前面 temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; flag = true; } } if (flag == false){//如果没有发生交换,则已经是有序的 break; } } } }
需求:便携五子棋游戏中,有存盘退出和续上盘的功能。
分析问题:因为该二维数组的很多值是默认的0,因此记录了很多没有意义的数据。
解决:稀疏数组。
当一个数组中大部分元素为0,或者为同一值的时候,可以使用稀疏数组来保存该数组。
稀疏数组的处理方式是:
记录数组有几行几列,有多少个不同值。
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模。
左边是原始数组,右边是稀疏数组。
代码如下:
package com.maynerd.array; import java.util.Arrays; public class ArrayDemo08 { public static void main(String[] args) { /* 第一步 */ //创建一个二维数组 11*11 0:没有棋子 1:黑棋子 2:白棋子 int[][] array = new int[11][11]; array[1][2] = 1; array[2][3] = 2; //输出原始数组 System.out.println("输出原始数组"); for (int[] ints : array) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); } /* 第二步 */ //转为稀疏数组保存 //获取有效值个数 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if(array[i][j] != 0){ sum++;// } } } System.out.print("有效值个数为:"); System.out.println(sum); //创建一个稀疏数组的数组 int[][] thinArray = new int[sum + 1][3]; thinArray[0][0] = 11;//行 thinArray[0][1] = 11;//列 thinArray[0][2] = sum;//有效值 //遍历二维数组,将非零值存放稀疏数组中 int count = 0; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { if (array[i][j] != 0){ count++; thinArray[count][0] = i; thinArray[count][1] = j; thinArray[count][2] = array[i][j]; } } } //输出稀疏数组 System.out.println("输出稀疏数组"); for (int[] ints : thinArray) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); } /* 第三步 */ System.out.println("==================================="); System.out.println("还原:"); //还原稀疏数组 int[][] restoreArray = new int[thinArray[0][0]][thinArray[0][1]]; for (int i = 1; i < thinArray.length; i++) { restoreArray[thinArray[i][0]][thinArray[i][1]] = thinArray[i][2]; } //输出还原后的数组 for (int[] ints : restoreArray) { for (int anInt : ints) { System.out.print(anInt + "\t"); } System.out.println(); } } }
结果如下: