首先必须声明数组变量,才能在程序中使用数组。例如:
dataType[] arrayRefVar; //首选的方法 或者 dataType arrayRefVar[]; //效果相同,但是不是首选方法
Java语言使用new关键字操作符来创建数组。例如:
dataType[] arrayRefVar = new dataType[arraySize];
arrays.length //获取数组长度
代码:
public class ArrayDemo01 { public static void main(String[] args) { //数组类型 //1.声明一个数组 int[] nums; //2.创建一个数组 nums=new int[10]; //传值 nums[0]=1; nums[1]=2; nums[2]=5; nums[3]=1; nums[4]=2; nums[5]=4; nums[6]=6; nums[7]=8; nums[8]=7; nums[9]=9; //求和运算 int sum=0; for (int i = 0; i <nums.length ; i++) { sum=sum+nums[i]; } System.out.println(sum); } }
Java内存分析如图所示:
数组初始化方式:
public class ArrayDemo02 { public static void main(String[] args) { //静态数组初始化 int[] num={1,2,3,4,5}; System.out.println(num[0]); System.out.println("=========================="); //动态数组初始化 包含默认初始化值 int[] a=new int[10]; a[9]=90; System.out.println(a[9]); System.out.println(a[0]);//默认初始化值 } }
下标的合法区间为[0,length-1],如果越界就会报错:例如
public class ArrayDemo03 { public static void main(String[] args) { int[] a=new int[5]; System.out.println(a[5]);//超出边界 } }
报错:
//普通数组for循环 public class ArrayDemo03 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; //打印全部数组元素 for (int i = 0; i <arrays.length ; i++) { System.out.print(arrays[i]+" "); } System.out.println(); System.out.println("*********************************"); //计算数组元素之和 int sum=0; for (int i = 0; i <arrays.length ; i++) { sum+=arrays[i]; } System.out.println("sum="+sum); System.out.println("*********************************"); //查找数组最大元素 int max=arrays[0]; for (int i = 1; i <arrays.length ; i++) { if (arrays[i]>max){ max=arrays[i]; } } System.out.println("max="+max); } }
public class ArrayDemo04 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; //增强型的for循环,只能用于打印输出语句 JDK1.5以上版本才有,没有下标 for (int array : arrays) { System.out.print(array+" "); } } }
public class ArrayDemo04 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; printArray(arrays); } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } }
public class ArrayDemo04 { public static void main(String[] args) { int[] arrays={1,2,3,4,5}; int[] reverseArray = reverseArray(arrays); printArray(reverseArray); } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } //反转数组 public static int[] reverseArray(int[] arrays){ int[] result=new int[arrays.length];//定义一个新数组,用于存放数组 //反转操作 for (int i = 0,j=result.length-1; i <arrays.length ; i++,j--) { result [j]=arrays[i];//把arrays数组的第一个元素放在result数组的最后一位上 } return result; } }
定义:多维数组可以看成是数组的数组,例如二维数组就是一个特殊的一维数组,每一个元素都是一个一维数组。例如:
int a[][]=new int[2][5];//表示二维数组a可以看成是一个两行五列的数组
代码如下:
//多维数组 public class ArrayDemo05 { public static void main(String[] args) { //定义一个四行两列的二维数组 int[][] array={{1,2},{3,4},{5,6},{7,8}}; printArray(array[0]);// 输出 1 2 } //打印数组元素 public static void printArray(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i]+" "); } } }
概念:
功能:
import java.util.Arrays; public class ArrayDemo06 { public static void main(String[] args) { int[] array={1,45,14,2547,1245,6524,123,251,258}; System.out.println(array);//输出的是对象 [I@154617c System.out.println("***********************************"); //打印数组 调用方法 System.out.println(Arrays.toString(array)); System.out.println("************************************"); //调用printArray方法 printArray(array); System.out.println(); System.out.println("****************************************"); //排序 升序 Arrays.sort(array); System.out.println(Arrays.toString(array)); System.out.println("****************************************"); Arrays.fill(array,2,4,0);//表示数组下标为 2 到 4 之间的数据包括下标为 2 但是不包括下标为 4 的数据变成0 System.out.println(Arrays.toString(array)); } public static void printArray(int[] array){ for (int i = 0; i <array.length ; i++) { if (i==0){ System.out.print("["); } if (i==array.length-1){ System.out.print(array[i]+"]"); }else { System.out.print(array[i]+", "); } } } }
//稀疏数组 五子棋 public class ArrayDemo08 { public static void main(String[] args) { //定义一个二维数组 11*11 0:没有棋子 1:黑棋 2:白棋 int[][] array1=new int[11][11]; array1[1][2]=1; array1[2][3]=2; //输出原数组元素 System.out.println("输出原始的数组:"); for (int[] ints : array1) { for (int anInt : ints) { System.out.print(anInt+" "); } System.out.println(); } //转换为稀疏数组来保存 //1.获取有效值的个数 int count1=0; for (int i = 0; i <11 ; i++) { for (int j = 0; j <11 ; j++) { if (array1[i][j]!=0){ count1++; } } } System.out.println("有效值的个数:"+count1); System.out.println("=========================================="); //2.创建一个稀疏数组的数组 int[][] array2=new int[count1+1][3]; array2[0][0]=11; array2[0][1]=11; array2[0][2]=count1; //遍历二维数组,把非0的值存放到稀疏数组中 int count2=0;//计数 for (int i = 0; i <array1.length ; i++) { for (int j = 0; j <array1[i].length ; j++) { if (array1[i][j]!=0){ count2++; array2[count2][0]=i;//表示行 array2[count2][1]=j;//表示列 array2[count2][2]=array1[i][j];//表示值 } } } //输出稀疏数组 System.out.println("输出稀疏数组:"); for (int i = 0; i <array2.length ; i++) { System.out.println(array2[i][0]+" "+array2[i][1]+" "+array2[i][2]+" "); /* 输出稀疏数组: 11 11 2 ----->表示输出的是11行11列的数组,有两个有效值 1 2 1 ----->表示第一个有效值在下标为1,2的地方上,而且值是1 2 3 2 ----->表示第二个有效值在下标为2,3的地方上,而且值是2 */ } } }